문제:
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
목록이나 .cer 파일을 반복하기 위해 이 작업 코드를 foreach로 확장하려고 합니다. 아래는 지금까지의 시도입니다.
실패한 코드:
$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 + "\" + $_)
어쨌든 개체의 원본을 잃어버리고 네트워크 공유 대신 로컬에서 관련 파일을 찾으려고 시도합니다. 각 반복마다 이를 네트워크 공유로 명시적으로 지정해야 했습니다.