如何使用 PowerShell 从 SID 获取 NT 帐户

How to get NT Account from the SID using PowerShell

在处理 问题时,我发现我需要为 NT AUTHORITY\Network Service 帐户获取 localised 帐户名(谁 &¤%@ 本地化帐户名称?).

我有一个涉及 运行 一些 VBScript 代码的解决方法,但由于我的项目的其余部分是在 Powershell 中,我认为将此代码转换为 Powershell 是 "correct" (所以我不需要从我的 Powershell 调用 VBScript,我不知道该怎么做...)。

知道这是做什么的,以及在 Powershell 中是如何完成的吗?

Set objWMI = GetObject ("winmgmts:root\cimv2")
Set objSid = objWMI.Get ("Win32_SID.SID='S-1-5-20'")
Set MyDomain = objSid.ReferencedDomainName
Set MyAccount = objSid.AccountName

像这样应该可以解决问题;

$objSID = New-Object System.Security.Principal.SecurityIdentifier("S-1-5-20") 
$objAccount = $objSID.Translate([System.Security.Principal.NTAccount]) 
$objAccount.Value

输出:

NT AUTHORITY\NETWORK SERVICE

如果您想要更多的控制,您可以坚持使用 WMI 方法并执行类似这样的操作;

$acc = ([wmi]"Win32_SID.SID='S-1-5-20'")
$name = $acc.AccountName
$domain = $acc.ReferencedDomainName

$domain
$name
"{0}\{1}" -f $domain, $name

输出:

NT AUTHORITY
NETWORK SERVICE
NT AUTHORITY\NETWORK SERVICE

这样,您现在就拥有了与上述脚本相同的两个构成 NT 帐户名称的组件。

此方法可能最接近您的原始示例。