(Ох, это было забавно! Я продолжил дикую погоню, как говорится, пытаясь получить экземпляр Win32_SID, который является единичным и не перечисляемым обычными методами InstancesOf или Query ... ядд.)
Ну, это зависит от того, какой 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)
В C # в .NET 3.5:
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 .
С другой стороны, есть SID, который Active Directory использует для идентификации каждого члена домена ... Тот, который вы получаете, получая SID учетной записи компьютера в домене - тот, который заканчивается знаком доллара.
Например, используя вышеуказанную функцию PowerShell для члена домена с именем "CLIENT", вы можете набрать get-sid "CLIENT$"
.