在PowerShell中将二进制类型的SID转换为System.Security.Principal.SecurityIdentifier

3
我在这个网站上找到了一个链接,其中显示了如何将SID转换为二进制类型。有人能告诉我如何反向操作-将二进制类型转换回SID吗?
以下是提供的从SID转换为二进制的脚本:
PS> $sid = New-Object System.Security.Principal.SecurityIdentifier ("S-1-5-21-105005785-2143699225-541720777-501") 
PS> $c = New-Object 'byte[]' $sid.BinaryLength 
PS> $sid.GetBinaryForm($c, 0) 

谢谢!


如果你想在C#中做同样的事情,请参考https://dev59.com/E4Hba4cB1Zd3GeqPQV8h#59258680。 - Jon R
如果你想在C#中做同样的事情,请参考https://dev59.com/E4Hba4cB1Zd3GeqPQV8h#59258680。 - Jon R
2个回答

4

将字节数组转换为SID,请尝试:

(New-Object System.Security.Principal.SecurityIdentifier($c, 0)).toString()

2
你也可以直接使用结果对象的.Value属性,而不是调用tostring()方法。只是提醒一下。 - Nick Nieslanik
2
很棒的东西;顺便说一句:看起来你在这里尝试使用“方法”语法,这只是碰巧起作用(PowerShell将($c, 0)解析为单独的参数@($, 0),然后映射到-ArgumentList);也许更好的形式是New-Object System.Security.Principal.SecurityIdentifier $bytes, 0或者更明确一点的写法是New-Object -TypeName System.Security.Principal.SecurityIdentifier -ArgumentList @($bytes, 0) - mklement0

0
如果你想在C#中做同样的事情,你可以像这样做(来自https://dev59.com/E4Hba4cB1Zd3GeqPQV8h#59258680):
在我的情况下,byte[] 是从一个ManagementEventWatcher获取的。
ManagementBaseObject ne = e.NewEvent;
var securityIdentifier = System.Security.Principal.SecurityIdentifier((byte[])ne.Properties["SID"].Value, 0);

你可以直接使用securityIdentifier.ToString()将SID转换为字符串。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接