我正在尝试将证书数组枚举到日志文件:
$allCerts = Get-ChildItem Cert:\LocalMachine\My\ | Select-Object name,subject,Thumbprint,Issuer,NotAfter
然后通过日志记录功能发送日志:
$allCerts | ForEach-Object {logger -logstr $_}
这会在日志中显示以下内容(已删除敏感信息)-请注意,日志未包装,这是每个证书的一行:
[2020-0326-1003:11:10] : @{name=; Subject=CN=WinRM HTTPS mycomputer; Thumbprint=12345679679484747463etygvetevtreye; Issuer=CN=WinRM HTTPS computer; NotAfter=03/26/2023 09:38:09}
[2020-0326-1003:11:11] : @{name=; Subject=CN=mycompcert2.abc.de.fg; Thumbprint=fdhshs44he4hhh4the44h4h4; Issuer=CN=Enterprise CA, OU=Cert Svcs, O=A Corporation, L=location, S=state, C=AU; NotAfter=09/20/2050 10:30:00}
到目前为止,我发现的唯一方法是:
$allCerts | ForEach-Object {logger -logstr ($_ | Out-String)}
哪个给:
[2020-0326-0952:11:56] :
name :
Subject : CN=WinRM HTTPS mycomputer
Thumbprint : 12345679679484747463etygvetevtreye
Issuer : CN=WinRM HTTPS computer
NotAfter : 03/26/2023 09:38:09
[2020-0326-0952:11:57] :
name :
Subject : CN=mycompcert2.abc.de.fg
Thumbprint : fdhshs44he4hhh4the44h4h4
CN=Enterprise CA, OU=Cert Svcs, O=A Corporation, L=location, S=state, C=AU
NotAfter : 09/20/2050 10:30:00
是否有一种“整齐的”方式可以将数组的每个成员的属性枚举到日志中的一行,而不必使用| out-string
?
答案 0 :(得分:2)
您的Logger
函数似乎需要一个 string 。因此您需要构建字符串1st。默认的.ToString()
方法无法满足您的需求。
您可以做些棘手的技巧,并使用ConvertTo-CSV
为您提供CSV文件中的行...并跳过第一行以摆脱标题行。类似于以下内容...
[我的机器证书列表没有证书,所以我使用了当前用户。另外,我没有Name
属性...只有FriendlyName
属性。]
Get-ChildItem Cert:\CurrentUser\My |
Select-Object -Property FriendlyName, Subject, Thumbprint, Issuer, NotAfter |
ConvertTo-Csv -Delimiter ';' -NoTypeInformation |
Select-Object -Skip 1
输出...
"APNS certificate";"CN=95F066ED-5A55-4053-84A0-D49E72C4AF6B";"42DA37600AFD9F0423FDCCF298A89C6CF1F945C8";"CN=Apple iPhone Device CA, OU=Apple iPhone, O=Apple Inc., C=US";"2016-11-03 2:18:59 PM"
"APNS certificate Direct";"CN=8E9D6C89-2BEF-4677-A9AD-84645ABFE44A";"2580F9FD8CB5E49EAC1035940D0D8EC09746A078";"CN=Apple iPhone Device CA, OU=Apple iPhone, O=Apple Inc., C=US";"2019-12-09 3:39:44 AM"
如果要删除引号,这似乎很容易。 [咧嘴]