Es kann vorkommen, dass aufgrund eines Problems mit einer Zertifikatsvorlage alle Zertifikate davon auf den Clients gelöscht werden sollen, um einen sauberen Stand auf den Computern zu haben.
Dazu habe ich eine kleine Batchdatei geschrieben, das alle Zertifikate im Computerstore ausliest und anhand der Seriennummer die Vorlage des Zertifikates ermittelt. Stimmt der Name der Vorlage mit dem angegebenen Vorlagenname (hier Vorlagename) überein, dann wird es gelöscht.
Die Batchdatei kann man mit Hilfe einer Gruppenrichtlinie oder einer Softwareverteilung an die Clients verteilen.
————————– hier ausschneiden ——————————
@echo off
setlocal ENABLEDELAYEDEXPANSION
rem Aktuelle Zertifikate im My-Store ausgeben (beinhaltet auch den COmputer Store)
certutil -store my > %temp%\store.tmp
rem durch das ergebnis durchgehen
for /f "delims=: tokens=1,*" %%a in (%temp%\store.tmp) do (
rem seriennummer des aktuellen zertifikates zwischenspeichern
if %%a.==Seriennummer. (
set seriennummer=%%b
)
rem anhand ausgabe der vorlage erkennen ob es eine bestimmte Vorlage hat
if %%a.==Vorlage. (
echo %%a | findstr /i "Vorlagenname"
if ERRORLEVEL 0 (
certutil -delstore my !seriennummer!
)
set seriennummer=
)
)
del %temp%\store.tmp
Endlocal
————————– bis hier ausschneiden ——————————
Hey,
nettes script erstmal danke dafuer.
leider sind meine Batch skills arg eingerostet
wieso werden die Variablen via %% angesprochen und was bedeutet der . dahinter?
Bin da bei das script fuer meine Faelle unzustricken, dazu muss ich nach Serial Number Suchen. Muss dazu der Delims und der Token angepasst werden?
Ware voll nett wenn du mir das erklaeren koenntest oder eine url parat hast wo das ganze besprochen wird.
Danke
chris
@chris
Hi,
die Variablen werden per %%a angesprochen, da die cmd im ersten Durchlauf alles mit %a ersetzen würde, und dann gäbs die nicht mehr. %%a wird somit nach dem Ersetzen ein normales %a sein.
Der Punkt hinter der Variable ist für den Vergleich notwendig. Wenn die Variable leer ist, würde das if Statement falsch sein, da die Variable wieder nur durch den Text ersetzt wird: “if ==blabla”. Durch den Punkt (oder irgendwas anderes) bleibt auf jeden Fall if .==blabla.
Bei einem englischen System sollte ein Ersetzen durch Serial Number reichen. Falls nicht einfach eine Beispielausgabe anhängen.
Viel Erfolg
Markus
Hey Danke fuer die schnelle Antwort..
ich bin zu bloed ohne debugger komme ich nicht klar
Ausgabe
my
================ Certificate 0 ================
Serial Number: 7f5c678f000100004edc
Issuer: CN=xyz, DC=abc, DC=net
NotBefore: 11/23/2011 10:44 AM
NotAfter: 11/22/2012 10:44 AM
Subject: CN=xxx.zzz.net
Certificate Template Name (Certificate Type): Machine
Non-root Certificate
Template: Machine, Computer
Cert Hash(sha1): 99 ac 76 69 45 fa 25 ed de d1 ea c9 30 43 8c 43 ed a7 06 7f
Key Container = 9eefc1efdcxxxxxxxx1fddf_126c3772-206b-yyyy-84b5-50a523cfa1fd
Provider = Microsoft RSA SChannel Cryptographic Provider
Encryption test FAILED
CertUtil: -store command completed successfully.
Hier meine Aenderung
@echo off
setlocal ENABLEDELAYEDEXPANSION
rem Aktuelle Zertifikate im My-Store ausgeben (beinhaltet auch den COmputer Store)
certutil -store my > store.tmp
rem durch das ergebnis durchgehen
for /f “delims=: tokens=1,*” %%a in (store.tmp) do (
rem seriennummer des aktuellen zertifikates zwischenspeichern
if %%a.==Serial Number. (
set seriennummer=%%b
)
rem anhand ausgabe der vorlage erkennen ob es eine bestimmte Vorlage hat
if %%a.==Template. (
echo %%a | findstr /i “Machine, Computer”
if ERRORLEVEL 0 (
rem certutil -delstore my !seriennummer!
echo Gefunden
)
set seriennummer=
)
)
rem del store.tmp
Endlocal
Hey,
ich bins noch mal
also wenn ich das script wie oben beschrieben ausfuehre passiert nix. Ich komme nie in den ERRORLEVEL 0
Danke schonmal
Chris
So. Jetzt hatte ich endlich mal Zeit mir dein Beispiel anzuschauen. Keine Ahnung ob du es noch benötigst , aber das Problem liegt in dem Leerzeichen bei Serial Number. Wenn man aus der Zeile
if “%%a”==”Serial Number” (
macht, dann funktioniert das Skript (wenigstens bei mir mit deinen Ausgaben). In diesem Fall braucht man kein . mehr, da wir jetzt ja ” haben
Grüße
Makrus
Super vielen Dank schonmal, werde is dann Morgen gleich mal testen.
Viele Grüße
Chris
Super das wars! Vielen Vielen Dank