问题:
当我在 foreach 之外单独导入证书时,它会根据需要打印指纹;但是,我需要遍历文件共享上的 .cer 文件列表,以便我可以针对本地计算机当前安装的证书运行它们。当我尝试通过 foreach 运行证书列表时,它失败了。
工作代码(单独)
<# Notice the explicite .cer file #>
$certGet = Get-ChildItem -Path \\fileserver\...\Certs\cert.cer
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cert.Import($certGet)
$cert.Thumbprint
我正在尝试将此工作代码扩展为 foreach 以迭代列表或 .cer 文件。以下是我迄今为止的尝试。
失败代码:
$certGetList = Get-ChildItem -Path \\fileserver\...\Certs
$certGetList | ForEach-Object {
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cert.Import($_)
$cert.Thumbprint
}
错误信息
ERROR: Exception calling "Import" with "1" argument(s): "The system cannot find the file specified.
ERROR: "
list_thumbprints_test.ps1 (18, 2): ERROR: At Line: 18 char: 2
ERROR: + $cert.Import($_)
ERROR: + ~~~~~~~~~~~~~~~~
ERROR: + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
ERROR: + FullyQualifiedErrorId : CryptographicException
ERROR:
答案1
当然...就这么简单。
回答:
$cert.Import($certGetList + "\" + $_)
不知何故,它失去了对象的来源,并尝试在本地而不是在网络共享上查找相关文件。我需要在每次迭代中明确将其指向网络共享。