Installieren Sie mehrere .cer (Zertifikate) aus einem Netzwerkverzeichnis mit Powershell. Überprüfen Sie jedoch zunächst, ob sie bereits installiert sind

796
Tucker

Ich lerne immer noch die Möglichkeiten der Powershell und habe Schwierigkeiten, ein Problem zu lösen.

Ich hätte gerne folgende Logik:

  1. Gehen Sie zu \ fileserver \ certs und ziehen Sie alle Fingerabdrücke für jede CER-Datei dort ab
  2. Führen Sie die Liste der entfernten Fingerabdrücke anhand der lokalen cert: \ location-Liste der Fingerabdrücke aus
  3. 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

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.

Etwas wie das:

$cer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $cer.Import("PathToCer\cabundle.crt") $cer.Thumbprint 
Du hast den Nagel auf den Kopf getroffen. Vielen Dank Kage! Tucker vor 6 Jahren 0