Как я могу получить Windows Computer's SID с помощью WMI?

Я не ищу Пользователя SIDs. Я ищу компьютер SID, который активный каталог использовал бы для однозначного определения компьютера. Я также не хочу запрашивать активный сервер каталогов, я хочу запросить сам компьютер.

25
задан Mark 28 June 2010 в 14:48
поделиться

1 ответ

(О, это было весело! Я отправился в погоню за диким гусем, как говорится, пытается получить экземпляр Win32_SID, который является синглтоном и не может быть перечислен обычными методами InstancesOf или Query ... yadda yadda yadda.)

Ну, это зависит от того, какой 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 для члена домена с именем «КЛИЕНТ», вы можете ввести get-sid «КЛИЕНТ $» .

39
ответ дан 28 November 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: