作用域正在用户的本地计算机上运行。您可以使用它来获取活动用户的SID。然后你可以把它和香港大学的注册表单元一起使用。
@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%
BTW,如果你想在没有For
循环的情况下完成,你可以请求powershell提供帮助:
%SystemRoot%System32WindowsPowerShellv1.0powershell.exe -NoProfile -Command "(%SystemRoot%System32whoami.exe /User /Fo CSV | ConvertFrom-Csv).SID"
甚至没有whoami.exe
:
%SystemRoot%System32WindowsPowerShellv1.0powershell.exe -NoProfile -Command "Add-Type -AssemblyName System.DirectoryServices.AccountManagement;$([System.DirectoryServices.AccountManagement.UserPrincipal]::Current).SID.Value"
在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"
当你提出一个问题,并决定发布一些代码时,无论你是否决定将你的代码作为解决方案发布,我都会提供一个更快、更简单的替代方案:
来自cmd:
For /F Tokens^=3^ Delims^=^" %G In ('%SystemRoot%System32whoami.exe /User /Fo CSV /NH') Do @Echo %G
从批处理文件:
@For /F Tokens^=3^ Delims^=^" %%G In ('%SystemRoot%System32whoami.exe /User /Fo CSV /NH') Do @Echo %%G