如何使用 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 帐户名称的组件。
此方法可能最接近您的原始示例。
在处理 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 帐户名称的组件。
此方法可能最接近您的原始示例。