剛接觸 powershell,我的 foreach 總是失敗。嘗試迭代證書文件列表但失敗。大概很簡單

剛接觸 powershell,我的 foreach 總是失敗。嘗試迭代證書文件列表但失敗。大概很簡單

問題:

當我在 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 + "\" + $_)

不知何故,它丟失了對象的來源並嘗試在本地而不是網絡共享上查找相關文件。我需要在每次迭代時明確地將其定向到網路共享。

相關內容