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

どういうわけか、オブジェクトの原点が失われ、ネットワーク共有上ではなくローカルで相対ファイルを見つけようとします。反復ごとにネットワーク共有に明示的に指示する必要がありました。

関連情報