【问题标题】:How to get active session user SID?如何获取活动会话用户 SID?
【发布时间】:2016-09-06 13:55:12
【问题描述】:

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

我可以使用 CMD 命令来做到这一点:

for /f "tokens=2-4" %a in ('qwinsta') do @if "%c"=="Active" wmic useraccount where name='%a' get sid

也许有人可以告诉我如何用 VBScript 做同样的事情?

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

【问题讨论】:

  • 编辑您关于'qwinsta' 包含什么的问题。

标签: vbscript cmd


【解决方案1】:

试试这个 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
'******************************************************************

注意:我是从这个链接获得的 How to find out logged on users SID with VBScript?

【讨论】:

  • 感谢您的回复,Ths 脚本几乎可以工作,问题是当我以管理员身份运行它时,它返回给我admin SID 我想获取我调用此脚本的当前用户,尽管run as administrator
  • 我知道,这就是我寻求帮助的原因,例如我的cmd 命令可以解决问题。
  • 定义“当前用户”。
  • 我知道“当前用户”是指“在 UAC 让我输入管理员凭据之前启动脚本的帐户”。但从剧本的角度来看,情况就不同了。由于 UAC,它不知道它以管理员身份运行,也不知道是其他用户之一登录到这台 PC 导致这种情况发生。它所知道的是它以管理员身份运行。如果您需要上下文信息,则必须明确提供它 - 例如,通过使用包含您感兴趣的用户名的命令行参数调用脚本。
  • 检查explorer.exe进程的owner
【解决方案2】:

获取当前登录域用户的 SID

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

例子:

c:\>whoami /user
USER INFORMATION
----------------
User Name      SID
============== ==============================================
mydomain\wincmd S-1-5-21-7375663-6890924511-1272660413-2944159
c:\>

你可以用批处理文件做类似的事情:

@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

【讨论】:

    猜你喜欢
    • 2021-07-01
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 2020-03-23
    相关资源
    最近更新 更多