Vbscript 如何获取活动会话用户SID?

Vbscript 如何获取活动会话用户SID?,vbscript,cmd,Vbscript,Cmd,如何获取活动会话用户SID?(它是当前用户会话) 我可以使用CMD命令执行此操作: for/f“tokens=2-4”%a in('qwinsta')do@if“%c”==“Active”wmic用户帐户,其中name=“%a”获取sid 也许有人能告诉我如何用VBScript做同样的事情 “当前用户”是指“在UAC要求我输入管理员凭据之前启动脚本的帐户”。尝试一下此vbscript: Option Explicit Dim strUser strUser = CreateObject("WS

如何获取活动会话用户SID?(它是当前用户会话)

我可以使用CMD命令执行此操作:

for/f“tokens=2-4”%a in('qwinsta')do@if“%c”==“Active”wmic用户帐户,其中name=“%a”获取sid
也许有人能告诉我如何用VBScript做同样的事情


“当前用户”是指“在UAC要求我输入管理员凭据之前启动脚本的帐户”。

尝试一下此vbscript:

Option Explicit
Dim strUser
strUser = CreateObject("WScript.Network").UserName
Wscript.echo "The SID of this username " & strUser & " is :" &_
vbcr & GetSIDFromUser(strUser)
'******************************************************************
Function GetSIDFromUser(UserName)
  Dim DomainName, Result, WMIUser
  If InStr(UserName, "\") > 0 Then
    DomainName = Mid(UserName, 1, InStr(UserName, "\") - 1)
    UserName = Mid(UserName, InStr(UserName, "\") + 1)
  Else
    DomainName = CreateObject("WScript.Network").UserDomain
  End If
  On Error Resume Next
  Set WMIUser = GetObject("winmgmts:{impersonationlevel=impersonate}!" _
    & "/root/cimv2:Win32_UserAccount.Domain='" & DomainName & "'" _
    & ",Name='" & UserName & "'")
  If Err.Number = 0 Then
    Result = WMIUser.SID
  Else
    Result = ""
  End If
  On Error GoTo 0
  GetSIDFromUser = Result
End Function
'******************************************************************
NB:我从这个链接获得它获取当前登录域用户的SID

从命令行运行命令
whoami/user
,获取登录用户的
SID

例如:

您可以使用批处理文件执行类似操作:

@ECHO OFF
SETLOCAL enabledelayedexpansion
for /f "skip=1 tokens=1,2 delims=," %%a in ('Whoami /user /FO CSV') do ( 
    set "UserName=%%a"
    set "SID=%%b"
    echo The username logged is : !Username!
    echo.
    echo And its SID = !SID!
)
pause
exit

感谢您的回复,这个脚本几乎可以正常工作,问题是当我以管理员身份运行它时,它返回我
管理员SID
我想获取我调用此脚本的当前用户,尽管
以管理员身份运行
我知道,这就是我请求帮助的原因,例如,我的
cmd
命令就起到了作用。定义“当前用户”。我知道“当前用户”是指“在UAC让我输入管理员凭据之前启动脚本的帐户”“但从剧本的角度看,这是另一回事。它不知道由于UAC的原因,它以管理员的身份运行,也不知道是登录到这台电脑的其他用户之一导致了这种情况的发生。它只知道它是以管理员的身份运行的。如果需要上下文信息,则必须显式提供它-例如,通过使用包含您感兴趣的用户名的命令行参数调用脚本。请检查
explorer.exe
进程的属性。编辑有关
'qwinsta'
包含哪些内容的问题。
@ECHO OFF
SETLOCAL enabledelayedexpansion
for /f "skip=1 tokens=1,2 delims=," %%a in ('Whoami /user /FO CSV') do ( 
    set "UserName=%%a"
    set "SID=%%b"
    echo The username logged is : !Username!
    echo.
    echo And its SID = !SID!
)
pause
exit
Option Explicit
Dim Shell:Set Shell = CreateObject( "WScript.Shell" )
Dim std:Set std = Shell.Exec("cmd /v /c echo off&for /f ""delims= "" %a in ('""wmic path win32_useraccount where name='%UserName%' get sid""')do if not %a==SID echo ""%a""")
Dim SID:SID = std.StdOut.ReadAll()
Dim objRegExp:Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Pattern="""?\r?\n"
objRegExp.Global=True
SID = objRegExp.Replace(SID, "")
objRegExp.Pattern="""?"
SID = objRegExp.Replace(SID, "")
MsgBox (SID)