我不是在寻找用户SID。我正在寻找计算机SID,哪个活动目录将用于唯一标识计算机。我也不想查询活动目录服务器,我想查询计算机本身。 (哦,这是一个有趣的一个,我去一个野鹅追
那么,它取决于你想要的计算机SID(认真!)。有本地计算机使用的SID本身…为此,您只需要获取本地管理员用户的SID,并从最后删除“-500”以获取计算机的SID。
在VBScript中,它看起来像这样:
strComputer = "AFAPC001" strUsername = "Administrator" Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set objAccount = objWMIService.Get("Win32_UserAccount.Name='" & strUsername & "',Domain='" & strComputer & "'") WScript.Echo "Administrator account SID: " & objAccount.SID WScript.Echo "Computer's SID: " & Left(objAccount.SID, Len(objAccount.SID) - 4)
在PowerShell中,像这样:
function get-sid { Param ( $DSIdentity ) $ID = new-object System.Security.Principal.NTAccount($DSIdentity) return $ID.Translate( [System.Security.Principal.SecurityIdentifier] ).toString() } > $admin = get-sid "Administrator" > $admin.SubString(0, $admin.Length - 4)
在.NET 3.5的C#中:
using System; using System.Security.Principal; using System.DirectoryServices; using System.Linq; public static SecurityIdentifier GetComputerSid() { return new SecurityIdentifier((byte[])new DirectoryEntry(string.Format("WinNT://{0},Computer", Environment.MachineName)).Children.Cast<DirectoryEntry>().First().InvokeGet("objectSID"), 0).AccountDomainSid; }
所有这些结果与PsGetSid.exe获得的响应相符。
另一方面,Active Directory用来识别每个域成员计算机的SID …通过获取域中的计算机帐户的SID(以美元符号结尾)获取的SID。
例如,对于名为“CLIENT”的域成员使用上述PowerShell函数,可以键入get-sid“CLIENT $”。