如何解决在 PowerShell 中,如何提取 NoteProperty 的属性一行?
我正在尝试使用 Get-AuthenticodeSignature 提取签名者主题字符串。我想出了如何通过首先将 SignerCertificate NoteProperty 分配给变量,然后选择主题来获得它。但是,我终其一生都无法弄清楚如何在一行中实现所有内容。
这有效:
PS C:\> $SignerInfo = Get-AuthenticodeSignature "C:\Windows\system32\notepad.exe"| Select-Object SignerCertificate
PS C:\> $SignerInfo
SignerCertificate
-----------------
[Subject]…
PS C:\> $SignerInfo.SignerCertificate
Thumbprint Subject EnhancedKeyUsageList
---------- ------- --------------------
A4341B9FD50FB9964283220A36A1EF6F6FAA7840 CN=Microsoft Window… {Windows System Component Verification,Code Signing}
PS C:\> $SignerInfo.SignerCertificate.Subject
CN=Microsoft Windows,O=Microsoft Corporation,L=Redmond,S=Washington,C=US
我试图把它写成一行,结果非常接近:
PS C:\> Get-AuthenticodeSignature "C:\Windows\system32\notepad.exe"| Select-Object SignerCertificate
SignerCertificate
-----------------
[Subject]…
但是我如何更深入地从这里提取主题?添加第二个 Select-Object 不会返回任何内容...添加 .Subject 不会返回任何内容... Get-Member 告诉我 SignerCertificate 是一个 NoteProperty,而 Select-Object *
会转储所有内容。
PS C:\> Get-AuthenticodeSignature "C:\Windows\system32\notepad.exe"| Select-Object *
SignerCertificate : [Subject]
CN=Microsoft Windows,C=US
[Issuer]
CN=Microsoft Windows Production PCA 2011,C=US
[Serial Number]
3300000266BD1580EFA75CD6D3000000000266
etc...
我可以使用;使其成为这样的单行:$SignerInfo = Get-AuthenticodeSignature "C:\Windows\system32\notepad.exe"; $SignerInfo.SignerCertificate.Subject
,但现在是学习的时刻,弄清楚打开 [Subject]…
这些不起作用(尽管它们看起来应该起作用,因为当您使用变量时它们起作用):
Get-AuthenticodeSignature "C:\Windows\system32\notepad.exe" | Select-Object SignerCertificate.Subject
Get-AuthenticodeSignature "C:\Windows\system32\notepad.exe" | Select-Object SignerCertificate | Select-Object Subject
如何直接从管道中提取主题?
解决方法
使用 Select-Object
不是很有效,这个 cmdlet 在对数据集进行数据分析时非常有用,主要是因为它的参数 -First
、-Last
、{{1 }} 等
回答您的问题,您可以通过以下方式在一行中获取证书的 -Unique
属性:
Subject
通过使用 PS C:\> (Get-AuthenticodeSignature "C:\Windows\system32\notepad.exe").SignerCertificate.Subject
CN=Microsoft Windows,O=Microsoft Corporation,L=Redmond,S=Washington,C=US
封装您的 cmdlet,您正在创建您的 cmdlet/函数返回的类的实例对象,这将允许您调用对象的成员/属性和方法,而无需存储它们在一个变量中。
这适用于您在 PowerShell 上所做的一切,不仅是 cmdlet,还有一些示例:
( )
当您不确定对象的成员和方法是什么时,您可以随时使用 Get-Member
我希望这能帮助您更多地了解 PowerShell 和 OOP。如果有任何不清楚的地方,请告诉我,不幸的是,我在“理论”方面不是最好的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。