[英]Powershell - Export Certificate Info
我有一个 .cer 和 .der 文件列表,我需要记下它们的到期日期。 我有以下内容似乎给出了到期日期,但是当我添加 export-csv 命令时,它不会导出数据:
gci C:\test1 -Recurse -Filter *.cer |
%{
$cert = New-Object Security.Cryptography.X509Certificates.X509Certificate2 $_.FullName
if ($cert.NotBefore -lt (Get-Date))
{
Write-Output $cert.FriendlyName
Write-Output $cert.SubjectName
Write-Output $cert.notbefore
Write-Output $cert.NotAfter
}
}|export-csv c:\test2\test.csv -Append
如果我删除最后一部分,那么我会在屏幕上显示信息,但是当它导出到 CSV 时,我只会得到一个 #type.system.string 后跟一列“0”。 有没有人在这里有任何想法? 我知道上面只会给出“.cer”文件,我也需要找到“.der”文件,但是当我遇到它时,我会尝试越过那座桥:D
不是执行Write-Output
,而是创建一个PSCustomObject
然后导出到 CSV。 请注意以下if
块的更改:
gci C:\test1 -Recurse -Filter *.cer |
%{
$cert = New-Object Security.Cryptography.X509Certificates.X509Certificate2 $_.FullName
if ($cert.NotBefore -lt (Get-Date))
{
[PSCustomObject]@{
FriendlyName = $cert.FriendlyName
SubjectName = $cert.SubjectName
NotBefore = $cert.notbefore
NotAfter = $cert.NotAfter
}
}
}|export-csv c:\test2\test.csv -NoTypeInformation -Append -Encoding UTF8
这是有效的,因为PSCustomObject
只有您添加到其中的NoteProperty
属性。 如果您使用普通的HashTable
尝试过此操作,您的 CSV 将充满HashTable
对象上存在的属性,这不是您想要的。
现在您有了一组通用的列名,每个通过管道返回的PSCustomObject
都是 CSV 中的一行。 我已将-NoTypeInformation
添加到Export-Csv
因此它不会在转换自的 PowerShell 类型之上添加注释。 在大多数情况下,您不需要它,它可能会混淆一些解析器。 指定 UTF8 编码有助于某些第三方解析器的兼容性(有关更多信息,请参阅此答案的结尾),但并非绝对必要。
如果你不想要标题,那有点棘手,但仍然相当简单。 Export-Csv
不支持没有标题的导出。 您必须先将对象转换为 CSV 格式,跳过第一行,然后自己将其余的输出写入文件。 因此,在这种情况下,您将在Where-Object
块之后执行以下操作:
} | ConvertTo-Csv -NoTypeInformation | Select -Skip 1 | Set-Content -Encoding UTF8 c:\test2\test.csv
在 PowerShell 6 之前,使用重定向运算符或Set-Content
以任何编码从 PowerShell 写入文件将在文件开头包含字节顺序标记 (BOM)。 我相信Export-Csv
也Export-Csv
。 您不会在大多数编辑器中看到它,它通常不会导致 Windows 软件出现问题,但有一些 CSV 解析器会被 BOM 混淆。
使用 UTF8 编码会有所帮助,因为 UTF8 比 PowerShell 的默认 UTF16 具有更广泛的支持,但如果您使用的是 PowerShell 5.1 或更早版本,请考虑使用System.IO.File.WriteAllText
来指定无 BOM 编码的文件。 其中$csvString
是您要写入文件的 CSV 格式字符串:
$utf8NoBOM = New-Object System.Text.UTF8Encoding( $False )
[System.IO.File]::WriteAllText( $csvString, "C:\path\to\file.csv", $utf8NoBOM )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.