![PowerShell は初めてで、foreach が失敗し続けます。証明書ファイルのリストを反復処理しようとしましたが、失敗します。おそらく単純なことです](https://rvso.com/image/1557608/PowerShell%20%E3%81%AF%E5%88%9D%E3%82%81%E3%81%A6%E3%81%A7%E3%80%81foreach%20%E3%81%8C%E5%A4%B1%E6%95%97%E3%81%97%E7%B6%9A%E3%81%91%E3%81%BE%E3%81%99%E3%80%82%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%E3%82%92%E5%8F%8D%E5%BE%A9%E5%87%A6%E7%90%86%E3%81%97%E3%82%88%E3%81%86%E3%81%A8%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%81%8C%E3%80%81%E5%A4%B1%E6%95%97%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%8A%E3%81%9D%E3%82%89%E3%81%8F%E5%8D%98%E7%B4%94%E3%81%AA%E3%81%93%E3%81%A8%E3%81%A7%E3%81%99.png)
問題:
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 + "\" + $_)
どういうわけか、オブジェクトの原点が失われ、ネットワーク共有上ではなくローカルで相対ファイルを見つけようとします。反復ごとにネットワーク共有に明示的に指示する必要がありました。