Installieren Sie mehrere .cer (Zertifikate) aus einem Netzwerkverzeichnis mit Powershell. Überprüfen Sie jedoch zunächst, ob sie bereits installiert sind
837
Tucker
Ich lerne immer noch die Möglichkeiten der Powershell und habe Schwierigkeiten, ein Problem zu lösen.
Ich hätte gerne folgende Logik:
Gehen Sie zu \ fileserver \ certs und ziehen Sie alle Fingerabdrücke für jede CER-Datei dort ab
Führen Sie die Liste der entfernten Fingerabdrücke anhand der lokalen cert: \ location-Liste der Fingerabdrücke aus
Wenn ein .cer nicht lokal auf der Grundlage eines fehlenden Fingerabdrucks installiert ist, installieren Sie den .cer von \ fileserver \ certs an den Speicherort cert: \
Es gibt etwas mehr Logik in der Mitte, aber insgesamt möchte ich dies erreichen. Mein Hauptproblem ist, den Fingerabdruck aus den entfernten .cer-Dateien zu ziehen oder zu bestimmen, ob sie lokal auf andere Weise installiert werden (der Fingerabdruck ist meines Wissens der logischste Weg, aber ich bin völlig offen für Vorschläge).
Ich könnte jedes Zertifikat einfach jedes Mal in dem Verzeichnis installieren, wenn mein Skript ausgeführt wird, aber ich fürchte unnötigen Overhead, und der Show-Stopper ist, dass es jedes Mal, wenn es ausgeführt wird, Administratorrechte erfordert, und nicht erst beim ersten Start oder beim Erkennen neuer Zertifikate.
Das Hauptproblem ist, dass ich den Fingerabdruck aus der .cer-Datei nicht abrufen kann und die Vorschläge von Google bis jetzt erfolglos sind. Wenn ich herausfinden kann, wie ich den Fingerabdruck von der Fernbedienung abspreche, bin ich ziemlich sicher, dass ich die Foreach-Logik von diesem Punkt aus ermitteln kann.
Mein aktueller Code:
#Add certificate to local trusted store $certCheckLocation = "Cert:\LocalMachine\Root\(Cert Thumbprint...)" $certPutLocation = "Cert:\LocalMachine\Root\" $certFile = (Get-ChildItem -Path \\server\file.cer) $certCheckFile = (Test-Path -Path $certCheckLocation) if ($certCheckFile -eq $false) { If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { $messageBox.Popup("Please run as an admin.",5,"Proxy Utility",0) Break } else { $certFile | Import-Certificate -CertStoreLocation $certPutLocation } }
Darunter befindet sich der GUI-Code und einige Dinge, die die Proxy-Einstellung ändern, usw.
Kurz gesagt, es dauert einen einzelnen Zertifizierer und wendet ihn auf den lokalen Computer an. Wenn der Benutzer nicht admin ist, wird er aufgefordert, das Skript als admin neu zu starten. Ich beabsichtige, dies in einer foreach-Art und Weise zu skalieren, so dass das Skript beim Start eines Zertifizierers zu einem bestimmten Netzwerkverzeichnis beim Start bemerkt und versucht, das neue Zertifikat zu installieren. Wenn der Benutzer nicht admin ist, wird NUR angezeigt, wenn ein neues Zertifikat installiert werden muss.
Ich lerne immer noch Powershell, also wäre jede Hilfe sehr dankbar!
1 Antwort auf die Frage
1
Kage
Die einfachste Möglichkeit, einen Fingerabdruck aus einer CER-Datei zu ziehen, besteht darin, ein Zertifikatsobjekt in Powershell zu erstellen und das Zertifikat in dieses zu importieren. Danach können Sie das Objekt einschließlich des Fingerabdrucks mit Powershell anzeigen lassen.