Neu bei Powershell und mein Foreach scheitert immer wieder. Der Versuch, eine Liste der cert-Dateien zu durchlaufen, schlägt jedoch fehl. Wahrscheinlich einfach

449
Tucker

Problem:

Wenn ich ein cert einzeln importiere, außerhalb eines foreach, wird der Fingerabdruck nach Bedarf gedruckt. Ich muss jedoch eine Liste von .cer-Dateien in einem Fileshare durchlaufen, damit ich sie mit den lokal installierten Zertifikaten eines lokalen Computers ausführen kann. In dem Moment, in dem ich versuche, die Liste der Zertifikate durch mein foreach zu führen, schlägt dies fehl.

Arbeitscode (einzeln)

<# 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 

Ich versuche, diesen Arbeitscode zu foreach zu skalieren, um eine Liste oder .cer-Dateien zu durchlaufen. Unten ist mein Versuch soweit.

Fehlercode:

$certGetList = Get-ChildItem -Path \\fileserver\...\Certs  $certGetList | ForEach-Object { $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $cert.Import($_) $cert.Thumbprint } 

Fehlermeldung

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: 
0
Sehen Sie etwas, wenn Sie einfach `Write-Host $ _` am Anfang Ihres Foreach setzen? EBGreen vor 6 Jahren 0
Ja, die Datei wird direkt vor dem Ausdruck der Fehlermeldung innerhalb der aktuellen Iteration gedruckt. Beispiel: "cert1.cer" + Fehlermeldung und dann "cert2.cer" + Fehlermeldung. Die oben abgebildete Fehlermeldung wird bei jeder fehlgeschlagenen Iteration angezeigt. Tucker vor 6 Jahren 0
Ich habe auch versucht, $ _ über .import ("$ _") als Zeichenfolge zu importieren, führte jedoch zu demselben Fehler. Ich bin an diesem Punkt total verblüfft. Tucker vor 6 Jahren 0

1 Antwort auf die Frage

1
Tucker

Natürlich ... so einfach.

Antworten:

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

Irgendwie verliert es den Ursprung des Objekts und versucht, die relative Datei lokal zu finden, anstatt auf der Netzwerkfreigabe. Ich musste es explizit für jede Iteration auf die Netzwerkfreigabe lenken.