Problem:
Wenn ich ein Zertifikat einzeln importiere, außerhalb eines Foreach, wird der Fingerabdruck nach Bedarf gedruckt. Ich muss jedoch eine Liste von CER-Dateien in einer Dateifreigabe durchlaufen, damit ich sie mit den aktuell installierten Zertifikaten eines lokalen Computers ausführen kann. Sobald ich versuche, die Liste der Zertifikate über mein Foreach auszuführen, schlägt dies fehl.
Funktionierender Code (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 funktionierenden Code in ein Foreach zu skalieren, um über eine Liste oder .cer-Dateien zu iterieren. Unten ist mein bisheriger Versuch.
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:
Antwort1
Natürlich... so einfach.
Antwort:
$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 für jede Iteration explizit auf die Netzwerkfreigabe umleiten.