如何获取活动用户的 SID

Posted

技术标签:

【中文标题】如何获取活动用户的 SID【英文标题】:How To Get The Active User's SID 【发布时间】:2021-07-01 16:22:12 【问题描述】:

范围从用户的本地计算机运行。 您可以使用它来获取活动用户的 SID。 然后您可以将它与 HKU 注册表配置单元一起使用。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
ECHO GET THE NAME OF THE ACTIVELY LOGGED ON USER
FOR /F "skip=1" %%G IN ('wmic computersystem get username') DO (
    SET aUSER=%%G
    GOTO EXITLOOP1
)
:EXITLOOP1
ECHO %aUSER%
ECHO[


REM ECHO TRIM THE USERNAME
SET tUSER=%aUSER:~4%
REM ECHO %tUSER%
ECHO[


ECHO GET SID FOR USER: %tUSER%
FOR /F "usebackq skip=1" %%a IN (`WMIC USERACCOUNT WHERE NAME^='%%tUSER%%' GET SID`) DO (
    SET SID=%%a
    GOTO EXITLOOP2
)
:EXITLOOP2
ECHO %SID%

【问题讨论】:

这里有问题吗?如果您尝试将此添加为教程,请在页面的“问题”部分中按照本网站的问题格式以及在页面的“答案”部分中的答案进行操作。 关于您提供的代码已经有很多问题和答案了。我认为再买一个没有意义。 我不确定您为什么要在HKU, (HKEY_USERS) 注册表配置单元中使用它。由于用户是当前活动的帐户,他们的配置单元已经加载,因此可以使用 HKCU, (HKEY_CURRENT_USER) 访问。此外,没有理由将 SID 保存到变量中,因为它已经分配给元变量 %%a mhickey,我注意到您已经以登录本网站的身份返回,但没有回复上述 cmets 或提供官方答案的人。请参阅What should I do when someone answers my question? 以了解在这种情况下您可以选择哪些选项,因为没有接受答案的问题不会被本网站视为已回答。 【参考方案1】:

当您提出问题并决定发布一些代码时,我将提供一个更快、更简单的替代方案,无论您是否决定发布您的解决方案:

来自cmd:

For /F Tokens^=3^ Delims^=^" %G In ('%SystemRoot%\System32\whoami.exe /User /Fo CSV /NH') Do @Echo %G

来自batch-file:

@For /F Tokens^=3^ Delims^=^" %%G In ('%SystemRoot%\System32\whoami.exe /User /Fo CSV /NH') Do @Echo %%G

【讨论】:

【参考方案2】:

在 cmd.exe 控制台中,可以使用以下命令。

powershell -NoLogo -NoProfile -Command ^
    "Add-Type -AssemblyName System.DirectoryServices.AccountManagement;" ^
    "([System.DirectoryServices.AccountManagement.UserPrincipal]::Current).Sid.AccountDomainSid.Value"

要将结果放入变量中,请使用FOR 循环。 (是的,我知道,这很疯狂,对吧?)

FOR /F "delims=" %%A IN ('powershell -NoLogo -NoProfile -Command ^
    "Add-Type -AssemblyName System.DirectoryServices.AccountManagement;" ^
    "([System.DirectoryServices.AccountManagement.UserPrincipal]::Current).Sid.AccountDomainSid.Value"') DO (
    SET "USER_SID=%%~A"
 )
 ECHO USER_SID is set to %USER_SID%

还有很多其他的东西可以通过这种方式访问​​。

powershell -NoLogo -NoProfile -Command ^
    "Add-Type -AssemblyName System.DirectoryServices.AccountManagement;" ^
    "[System.DirectoryServices.AccountManagement.UserPrincipal]::Current |" ^
    "Format-List * -Force"

【讨论】:

【参考方案3】:

顺便说一句,如果您想在没有 For 循环的情况下执行此操作,可以请求 powershell 提供帮助:

%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -Command "(%SystemRoot%\System32\whoami.exe /User /Fo CSV | ConvertFrom-Csv).SID"

甚至没有whoami.exe:

%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -Command "Add-Type -AssemblyName System.DirectoryServices.AccountManagement;$([System.DirectoryServices.AccountManagement.UserPrincipal]::Current).SID.Value"

【讨论】:

以上是关于如何获取活动用户的 SID的主要内容,如果未能解决你的问题,请参考以下文章

如何从活动目录中获取用户列表?

如何获取活动目录用户的 IADs 接口?

Windows 7怎么获取当前用户的SID

如何获取当前登录电脑的windows账户信息

Microsoft Teams:如何获取用户的活动流(通知)?

如何获取当前登录用户的 UPN(用户主体名称)?