Problem:
Kiedy importuję certyfikat indywidualnie, poza foreach, drukuje odcisk palca w razie potrzeby; Jednak muszę iterować listę plików .cer w udostępnionym pliku, aby móc uruchomić je z aktualnie zainstalowanymi certyfikatami komputera lokalnego. W chwili, gdy próbuję uruchomić listę certyfikatów za pośrednictwem mojego foreach, kończy się to niepowodzeniem.
Kod roboczy (indywidualnie)
<# 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
Próbuję przeskalować ten działający kod na foreach, aby iterować po plikach listy lub .cer. Poniżej moja dotychczasowa próba.
Błąd kodu:
$certGetList = Get-ChildItem -Path \\fileserver\...\Certs
$certGetList | ForEach-Object {
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cert.Import($_)
$cert.Thumbprint
}
Komunikat o błędzie
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:
powershell
fingerprint
trusted-root-certificates
list
x509
Wielkie żarcie
źródło
źródło
Write-Host $_
na początku swojego foreach?Odpowiedzi:
Oczywiście ... takie proste.
Odpowiedź:
W jakiś sposób traci pochodzenie obiektu i próbuje znaleźć plik względny lokalnie, zamiast w udziale sieciowym. Musiałem wyraźnie skierować go do udziału sieciowego dla każdej iteracji.
źródło