Ответ 1
(О, это было весело!) Я отправился в дикую гусиную погоню, как говорится, пытаясь получить экземпляр Win32_SID, который является одноэлементным и не перечислимым обычными методами InstancesOf или Query... yadda yadda ядд.)
Ну, это зависит от того, какой компьютер SID вы хотите (серьезно!). Там SID, который использует локальный компьютер для себя... Для этого вам просто нужно получить SID локального пользователя Administrator и удалить "-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 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:
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 для члена домена, называемого "КЛИЕНТ", вы можете ввести get-sid "CLIENT$"
.