問題:
當我在 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 + "\" + $_)
不知何故,它丟失了對象的來源並嘗試在本地而不是網絡共享上查找相關文件。我需要在每次迭代時明確地將其定向到網路共享。