【问题标题】:How To Get The Active User's SID如何获取活动用户的 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? 以了解在这种情况下您可以选择哪些选项,因为没有接受答案的问题不会被本网站视为已回答。

标签: windows batch-file cmd command sid


【解决方案1】:

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

来自

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

来自

@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 循环的情况下执行此操作,可以请求 提供帮助:

      %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"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-20
        • 2011-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多