Nowość w PowerShell i mój foreach ciągle zawodzi. Próba iteracji po liście plików certyfikatów, ale nie udaje się. Prawdopodobnie proste


0

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:

widzisz coś, jeśli po prostu stawiasz Write-Host $_na początku swojego foreach?
EBGreen

Tak, drukuje plik w bieżącej iteracji tuż przed wydrukowaniem komunikatu o błędzie. Przykład: „cert1.cer” + komunikat o błędzie, a następnie „cert2.cer” + komunikat o błędzie. Pokazany powyżej komunikat o błędzie pojawia się w przypadku każdej nieudanej iteracji.
Tucker,

Próbowałem również zaimportować $ _ jako ciąg poprzez .import („$ _”), ale spowodowałem ten sam błąd. W tym momencie jestem totalnie zakłopotany.
Tucker

Odpowiedzi:


1

Oczywiście ... takie proste.

Odpowiedź:

$cert.Import($certGetList + "\" + $_)

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.