gpt4 book ai didi

windows - 如何使用 WMI 检索 Windows 计算机的 SID?

转载 作者:可可西里 更新时间:2023-11-01 12:11:38 24 4
gpt4 key购买 nike

我不是在寻找用户 SID。我正在寻找计算机 SID,Active Directory 将使用它来唯一标识计算机。我也不想查询事件目录服务器,我想查询计算机本身。

最佳答案

(哦,这很有趣!正如他们所说,我进行了一次疯狂的追逐,试图获得 Win32_SID 实例,它是一个单例,并且不能通过通常的 InstancesOf 或 Query 方法枚举...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)

在 .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$"

关于windows - 如何使用 WMI 检索 Windows 计算机的 SID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3133399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com