Powershell阵列枚举到日志

时间:2020-03-25 23:24:23

标签: arrays powershell

我正在尝试将证书数组枚举到日志文件:

$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

1 个答案:

答案 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"

如果要删除引号,这似乎很容易。 [咧嘴]