【发布时间】:2015-10-26 20:58:37
【问题描述】:
我正在尝试将证书扩展收集到 csv 中。 PowerShell 命令似乎在 PowerShell 中显示得很好,但是当通过管道传输到 csv 时,它们会显示其他类型的数据?
$cert = Get-ChildItem cert:\localmachine -Recurse
($cert.Extensions | Where-Object {$_.Oid.FriendlyName -eq "Key Usage"}).Format(1) | Export-Csv C:\Folder\File.csv
在网上搜索后,我尝试了一些不同的方法,但仍然无法像在 PowerShell 中那样捕获和显示数据。
$cert=Get-ChildItem cert:\localmachine -Recurse
$sanExt=$cert.Extensions | Where-Object {$_.Oid.FriendlyName -match "subject alternative name"}
$sanObjs = new-object -ComObject X509Enrollment.CX509ExtensionAlternativeNames
$altNamesStr=[System.Convert]::ToBase64String($sanExt.RawData)
$sanObjs.InitializeDecode(1, $altNamesStr)
Foreach ($SAN in $sanObjs.AlternativeNames) {$SAN.strValue}
$sanExt.Format(1) | Export-Csv C:\Folder\File.csv
【问题讨论】:
-
powershell 中的证书对象包含多个嵌套对象和数组。因此,它们不太适合简单地通过管道传输到 CSV 文件。如果您想保留所有信息,导出到支持此类结构的 JSON 或 XML 将是更好的选择。您到底想导出哪些属性?
-
感谢您抽出宝贵时间 TheMadTechnician,这对我的情况来说很不幸。我正在尝试收集安装在 LocalMachine 商店上的每个 CA 的所有 X.509 扩展。不过我不熟悉导出到 JSON 或 XML,你有我可以参考的例子吗?
-
导出到 JSON 非常简单:
$cert | ConvertTo-JSON | Set-Content C:\Path\To\File.txt我认为一个更好的问题是将这一切保存到文件中的原因。它是针对人眼的,还是会在某个时候被脚本/应用程序消化? -
感谢 TheMadTechnician 的回复。是的,数据被消化到 Splunk> 以进行可视化。我将运行您的代码,看看它的外观:) 在另一个说明中,我今天确实找到了这个博客,它帮助解释了为什么 PowerShell 中的数据的格式与通过管道传输到 csv 时的数据格式不同。我对powershell比较陌生,所以这有助于我了解更多。 windowsitpro.com/powershell/powershell-objects-and-output
-
TheMadTechnician,我能够将数据转换为 JSON 格式,遗憾的是数据仍然是整数格式。但是我确实成功地导出到 csv。经过一段时间在其他以 PowerShell 为重点的社区论坛上进行探索和发布后,我找到了解决问题的方法。这使我还可以根据需要将数据格式化为 csv,以便稍后消化到 Splunk>
$cert = Get-ChildItem cert:\localmachine -Recurse ($cert.Extensions | Where-Object {$_.Oid.FriendlyName -eq "Key Usage"}).Format(1) | Select-Object -Property @{Name="Certificate";Expression={$_}} | Export-csv -Path C:\Folder\file.csv
标签: csv powershell x509certificate export-to-csv