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

时间:2016-01-13 12:42:55

标签: powershell vbscript migration

在我处理another问题时,我发现我需要获取NT AUTHORITY\Network Service帐户的本地化帐户名称(&¤% @ localises帐户名)。

我有一个解决方法,涉及运行一些VBScript代码,但由于我的项目的其余部分是在Powershell中,我认为将此代码转换为Powershell是“正确的”(所以我不需要从我的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

1 个答案:

答案 0 :(得分:1)

这样的事情可以解决问题;

$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帐户名称的两个组件与上述脚本分开。

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