Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Registry-Key per Batch löschen, falls er XYZ lautet?

Frage Microsoft

Mitglied: suvv7777

suvv7777 (Level 1) - Jetzt verbinden

02.08.2010, aktualisiert 18.10.2012, 12684 Aufrufe, 13 Kommentare

Guten Tag! Dies ist mein erster Beitrag hier, da ich mich nun doch tatsächlich hier angemeldet habe. Benutzen tue ich dieses Forum schon sehr lange und zahlreiche Beiträge und Anleitungen haben mir schon weitergeholfen. Jetzt bin ich aber leider vorerst am Ende mit meinem Latein, aber ich bin sicher, dass man mir hier weiterhelfen kann. Also los:

Hallo zusammen,

ich stehe momentan vor einem Problem, zu welchem ich leider trotz intensiver administrator.de Lektüre noch keine Lösung gefunden habe.

Es geht um folgendes: Ich möchte gerne ein batch-Script erstellen, was abfragt, ob ein bestimmter Registry Key den Wert XYZ hat und wenn dem so ist, soll der Key gelöscht werden, aber auch nur dann. Leider bin ich recht unerfahren, was Batch-Skripte angeht, würde mich über eine Hilfestellung also sehr freuen.

Und dann in dem Zusammenhang noch eine (wahrscheinlich absolute Noob-)Frage: Der entsprechende Key ist ein REG_BINARY. Ich müsste also in das Script den HEX-Wert davon eingeben, ja? Mit Leerzeichen?

Ich danke schon jetzt für eure Antworten und hoffe, mich nicht vollkommen blamiert zu haben.

LG,
suvv7777
Mitglied: Biber
02.08.2010 um 11:06 Uhr
Moin suvv7777,

willkommen im Forum.

Vor dem Reinklimpern von irgendetwas in die Tastatur sollten wir erst nochmal die Wahl des Werkzeugs diskutieren.

Wenn es ein REG_BINARY ist, kann es vollkommen unproblematisch für einen Batch sein -- falls dieser Wert "0100" lautet oder auch "B9CD78528929EE46B0F992D799DFA286". Denn beides würde in eine per "REG QUERY" abgefragte Zeile passen.
Aber ein REG_BINARY kann auch (in der Anzeige/Ausgabe) über mehrere Zeilen gehen... dann ist Batch/Reg-Query kein sinnvolles Werkzeug.

Deshal die Rückfragen:
  • ist es ein abstrakter oder ein konkreter Key, um den es dir jetzt geht und von dem du weisst, welche Dimensionen er hat (wenn er mit deinem Suchstring übereinstimmen soll)?
  • Oder simpler - wie lautet denn der Vergleichsstring "XYZ" in der Realität?

Bei REG_BINARY-Werten würde ich jedenfalls eher VBSkript empfehlen.

Zum anderen verstehe ich den Ablauf nicht ganz.
  • Wenn Key NICHT vorhanden... dann isses okay, sagst du. Versteh ich.
  • Wenn Key vorhanden und gleich "XYZ", dann böse---> löschen. Versteh ich.
  • wenn Key vorhanden und gleich "ABC" (oder auch "ABC;XYZ"? ), dann banane ->keine Aktion? Versteh ich nicht.

Grüße
Biber
Bitte warten ..
Mitglied: suvv7777
02.08.2010 um 11:35 Uhr
Zitat von Biber:

willkommen im Forum.

Danke sehr!


OK, dann hole ich kurz aus. Wir benutzen hier Terminal Server mit Citrix und die User bekommen alle Applikationen vom Citrix Server gepublisht. Dummerweise ist bei der Installation von Office auf dem Server ein Fehler passiert. In der Shadow-Registry steht bei der User-Info von Office nun leider Administrator, was dazu geführt hat, dass dies bei jedem User übernommen wurde. Mein Ziel ist also ein Logon-Script mit folgendem Inhalt:

- Steht "Administrator" in der UserInfo > Mach das weg, das ist doof. (Der User wird dann beim nächsten Word/Excel/Whatever starten einmalig nach seinem Namen und den Initialien gefragt, was aber kein Problem ist.)
- Steht nicht Administrator drin, ist es gut, denn es kann dann nur der vom User eingegebene Name sein (bzw. der Anmeldename, weil die meisten User bei der Abfrage einfach "OK" klicken, was aber ok ist.)
- Ist der Key nicht vorhanden, hat sich der User vermutlich bereits einmal angemeldet, aber danach kein Office gestartet, was ok ist.

Ich hoffe, ich konnte verständlich machen, worum es geht.

Der Key selber ist also HKCU\Software\Microsoft\Office\11.0\Common\UserInfo\UserName

Und der Wert geht über vier Zeilen, falls ich dich richtig verstehe. Der Wert sieht ungefähr so aus:

0000 41 00 64 00 6D 00 69 00 A.d.m.i.
0008 6E 00 69 00 73 00 74 00 n.i.s.t.
0010 72 00 61 00 74 00 6F 00 r.a.t.o.
0018 72 00 00 00 r...


Ich frage mich gerade, warum das unbedingt ein REG_BINARY sein muss, aber nungut. MS halt.
Bitte warten ..
Mitglied: Biber
02.08.2010 um 12:09 Uhr
Moin suvv7777,

okay, in diesem Fall (da der Username nicht wirklich richtig lang werden kann, könnte es evtl stressarm gehen.

Probiere es mal selbst an einem CMD-Fenster aus
[Demo am CMD-Prompt; das führende ">" NICHT mit eingeben, ist Teil des Prompts]
>for /f "tokens=3" %i in ('reg query "HKCU\Software\Microsoft\Office\11.0\Common\userInfo" /v Username') do @Set "DerUsername=%i"
Wenn du dann die Variable "DerUsername" anzeigen lässt mit "Echo %DerUsername% bekommst du den vollständigen String.
Und den kannst du natürlich auch gegen deinen "Administrator in REG_BINARY geschrieben" vergleichen.

Was sich meiner Kenntnis entzieht ist allerdings, ob es in dieser PraktikantInnen-Kruschkiste namens Registry auch ebenso passieren kann, dass dort statt "A.d.m.i.n.i.s.t.r.a.t.o.r." vielleicht auch "a.d.m.i.n.i.s.t.r.a.t.o.r." oder "A.D.m.i.n.i.S.T.R.A.T.O.r." stehen kann (erlaubterweise und mit gleicher Bedeutung). Dann hast du verspielt mit native Batch.

Wenn ja -> dann müsste der BINARY-Sring doch ma' eben "in lesbar" umgewandelt werden, dann der in Kleinbuchstaben umgewandelte RegWert mit dem in Kleinbuchstaben umgewandelten Vergleichsstring "administrator" verglichen werden... ein Fall für VBSkript.

Dafür haben wir aber auch (glaube ich) ein kleines Tutorial hier "Registrywerte auslesen rauf und runter" oder so ähnlich.

Grüße
Biber
Bitte warten ..
Mitglied: suvv7777
02.08.2010 um 15:01 Uhr
Hi Biber,

danke für deine Hilfe. Also ich bin mir ziemlich sicher, dass wir hier tatsächlich nur den Fall haben, dass in den HKCU "A.d.m.i.n.i.s.t.r.a.t.o.r." drin steht. Mir ist zumindest bei schon einigen angesehen Beispielen nichts gegenteiliges aufgefallen. Der von dir beschriebene Weg bringt mir tatsächlich exakt den String aus dem REG_BINARY Wert. Also wenn ich dich richtig verstehe, funktioniert das nun "simpel" mit native Batch.

>Und den kannst du natürlich auch gegen deinen "Administrator in REG_BINARY geschrieben" vergleichen.

Da ich leider das von dir angesprochene Tutorial nicht gefunden habe, mal ganz dumm gefragt: Wie funktioniert das?

Und auch auf die Gefahr hin, mich tödlich zu blamieren: Ungefähr so?

IF "HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Common\UserInfo\UserName" == "410064006D0069006E006900730074007200610074006F0072000000" REG DELETE "HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Common\UserInfo\UserName"
Bitte warten ..
Mitglied: Biber
02.08.2010 um 15:31 Uhr
Moin suvv7777,

ja, ungefähr so.... sinngemäß war es richtig.

-> schau bitte nochmal im Bereich "Batch & Shell" die paar "Anleitungen" durch... da muss eine dabei sein, die mit "Registrywerten" zu tun hat.


Als Skizze (bin gerade etwas im Stress hier) SINNGEMÄSS:
01.
:: ---- DeinBatchname.cmd. 
02.
@echo off & setlocal 
03.
Set "DerRegZweig="HKCU\Software\Microsoft\Office\11.0\Common\UserInfo" 
04.
Set "DerRegKey=UserName" 
05.
Set "dasGefundene=NochNix" 
06.
Set "dasBoese=410064006D0069006E006900730074007200610074006F0072000000" 
07.
:: --- jetzt den Registrywert lesen 
08.
::  -- Fehlermeldungen wie "nicht gefunden" oder "keine Leserechte"... fange ich hier nicht ab. 
09.
FOR /f "tokens=3" %%i in ( 
10.
             'reg query "%DerRegZweig%" /v %derRegKey% ^|FindStr "BINARY" ' 
11.
   ) do @Set "DasGefundene=%%i" 
12.
:: fertig mit Lesen... jezz' vergleichen 
13.
:: Wenn Übereinstimmung -> Hau wech den Mist 
14.
:: Sonst Halt gar nix tun wie die Tigerenten. 
15.
IF "%DasGefundene%" == "%dasBoese%"  ( 
16.
       REG DELETE "%derRegZweig%" /v %derRegkey% /f 
17.
)
[Absolut ungetestet und nur leicht kommentiert....]

Grüße
Biber
Bitte warten ..
Mitglied: suvv7777
03.08.2010 um 13:30 Uhr
Moin Biber,

Sorry, die einzige Anleitung bei Batch & Shell, die ich mit registries finde, behandelt das auslesen ebendieser ohne reg.exe. Und der Link von Dr. House ;) hilft mir leider auch nicht so sehr.

Ich habe aber mit deinem Code jetzt mal getestet und habe tatsächlich das Problem, dass der Key nicht gefunden werden kann. Beim Auslesen des Registry-Wertes kommt die Meldung Fehler: Der angegebene Registrierungsschlüssel oder Wert konnte nicht gefunden werden.

Ich teste gerade an meinem Laptop, d.h. ich habe den String getauscht gegen den meinem Wert entsprechenden String. Aber daran kann es imho ja nicht liegen. Hat vielleicht noch jemand eine Idee oder einen Hinweis, was ich noch testen könnte?
Bitte warten ..
Mitglied: 60730
03.08.2010 um 15:25 Uhr
Zitat von suvv7777:
Und der Link von Dr. House ;) hilft mir leider auch nicht so sehr.

Naja der ist aber (ok vbs) genau das, was du eigentlich brauchst - also nicht nur das "kicken" des falschen Wertes, sondern gleich den richtigen hinschreiben.

Ich habe aber mit deinem Code jetzt mal getestet und habe tatsächlich das Problem, dass der Key nicht gefunden werden kann.
Beim Auslesen des Registry-Wertes kommt die Meldung Fehler: Der angegebene Registrierungsschlüssel oder Wert konnte nicht
gefunden werden.


..dann mach doch folgendes"

entweder nimmst du dem Bibers code die ersten beiden Befehle weg @echo off und läßt nur das setlocal drin oder:

01.
reg query "HKCU\Software\Microsoft\Office\11.0\Common\UserInfo" /v "Username" |find "410064006D0069006E006900730074007200610074006F0072000000" && echo böse böse 
02.
pause
..steht da nun böse böse weißt du, dass du beim übernehmen von Bibers code etwas verändert hast.
Nimmst du jetzt anstatt echo böse böse (das du sehen solltest - denn bei Office 2003 ist das der Wert, der für die Userinfo zuständig ist)

01.
reg query "HKCU\Software\Microsoft\Office\11.0\Common\UserInfo" /v "Username" |find "410064006D0069006E006900730074007200610074006F0072000000" && REG DELETE "HKCU\Software\Microsoft\Office\11.0\Common\UserInfo" /v "Username" /f 
Hast du mehr oder weniger das gleiche wie das Script vom Biber, aber kürzer und in dem Fall machts ja nix, wenn alles "hart" und nicht weich per Paramter vedrahtet ist.

Gruß

btw:

Dass ich mal einen kürzeren Code als Meister der Einzeiler Biber hier postet - das kreuz ich in meinem nicht vorhandenen Kalender an
Bitte warten ..
Mitglied: Biber
03.08.2010 um 16:16 Uhr
Moin suvv7777 und T-Mo,

ja, wir machen den Code etwas schlanker... und versuchen, ihn selbstdokumentierend und wartbar zu halten.

Das sieht dann so aus:
01.
:: ---- DeinSchlankererBatch.cmd 
02.
@echo off & setlocal 
03.
Set "DerRegZweig="HKCU\Software\Microsoft\Office\11.0\Common\UserInfo" 
04.
Set "DerRegKey=UserName" 
05.
Set "dasBoese=410064006D0069006E006900730074007200610074006F0072000000" 
06.
:: --- jetzt den Registrywert lesen 
07.
::  -- Fehlermeldungen wie "nicht gefunden" .. leite ich.nach dahin, wo unsere Rente schon ist 
08.
reg query "%DerRegZweig%" /v %derRegKey% ^2^>NUL ^|FindStr "%dasBoese%" &&  REG DELETE "%derRegZweig%" /v %derRegkey% /f 
09.
:: Wenn Übereinstimmung -> Hau wech den Mist...  Sonst unauffällig weiterregieren wie die Tigerenten. 
10.
 
Dann sind wenigstens die tippfehlerträchtigen Klamotten an EINER Stelle im Code.
Und formal haben wir das Soll erfüllt - wenn unterhalb von HKCU...Office2003...bla "Administrator" steht, dann löschen wir den Key.
[ Wenn wir ihn nicht lesen dürfen... tja, dann können wir auch nicht löschen.
Wenn der "Administrator" zufällig unter unter "HKCU...Office2000..bla" steht... tja - prüfen und merken wir nicht.
Works as designed.]

@suvv7777
Mit dem Registry-Tutorial dachte ich schon an das von dir gefundene... ja, auch wenn es heißt "Registry ohne REG.exe bearbeiten".
Die FOR /F-Mimik ist die gleiche Sosse. das gleiche Vorgehen.

BTW. Wie kommst du denn auf die Idee, das T-Mo ein Doktor wäre?
Weil er manchmal so schreibt wie die anderen Männer in den weissen Kitteln auf Rezepten? *gg

Nichtsdestotrotz:
- Der Scriptschnipsel hat schon -selbst für einen Batch- ein eher lockeres Verständnis von Qualität und Nachvollziehbarkeit.
  • es ist nicht nachvollziehbar, ob er überhaupt irgendwo irgendwann auf einem (Client-)Rechner gelaufen ist oder nicht
  • und auch nicht mit welchem Ergebnis -sei es mit Erfolg oder einen auf die Schnauze bekommen
  • der Schnipsel ist durch diesen Tunnelblick auf Office-Version 2003 so unflexibel wie meine Ex-Schwiegermutti.

Du solltest also MINIMAL an zwei, drei befreundeten Clientbüchsen probelaufen lassen.
Wenigstens um zu prüfen, ob nicht jedesmal der Fehler kommt "Reg.exe - Zugriff verweigert" oder jedesmal "Pfad nicht gefunden".
Der Fall "Registry-Wert gefunden, ist aber nicht "(binary)Administrator"" dagegen ist ja kein "Fehlerfall", sondern ein Prüfergebnis.

Grüße
Biber
Bitte warten ..
Mitglied: suvv7777
04.08.2010 um 14:01 Uhr
Hi Biber & Timo,

vielen vielen Dank für Eure Mühen, Biber, dein letzter Absatz hat mich allerdings nachdenklich gemacht und jetzt habe ich mal einen anderen Ansatz mir überlegt. Da das auslesen dieser REG_BINARY K*cke scheinbar die Achillesverse des ganzen ist, habe ich mir folgendes überlegt:

Das Problem hat hier jeder User. Das heißt also, dass bei jedem User einmal der entsprechende Key gelöscht werden muss. Jetzt habe ich das ganze folgendermaßen gebaut:

01.
if exist "%userprofile%"\flag.txt goto weiter 
02.
REG DELETE "HKCU\Software\Microsoft\Office\11.0\Common\UserInfo" /v "Username" /f 
03.
echo "UserInfo bereinigt">"%userprofile%"\flag.txt 
04.
:weiter
Ich setze also ein Flag in das User-Profile, dessen Existenz jedesmal überprüft wird. Der Key wird also nur gelöscht, wenn das Script noch nie ausgeführt wurde. In zwei oder drei Monaten, wenn sich jeder mindestens einmal angemeldet hat, entferne ich den Code wieder aus dem Logon-Script und alle sind glücklich. Hoffentlich. Gibt es Einwände?
Bitte warten ..
Mitglied: Biber
04.08.2010 um 15:58 Uhr
Moin suvv7777,

das finde ich vom Ansatz her schon praktikabler.

Es bleiben aber noch zwei Fälle übrig, in denen....hm... auf Optimierungspotential geprüft werden könnte.

Fall a)
Es ist bei dem Client-User noch nie gelaufen (Flag.txt jibbet nicht)
ABER es steht bereits der richtige USERNAME in der Registry.

Der wird dann umsonst gelöscht-> nicht schlimm, WENN er denn immer ohne Probleme neu angelegt wird.

Fall b)
Der Böse-böse-Wert "(binary)Administrator" steht in der Registry, das Skript ist noch nie gelaufen und versucht das "reg Delete".
Und bekommt einen aufs Maul, weil Reg.exe nicht vorhanden oder Zugriff auf Reg.exe verweigert...
Dann steht nach dem Lauf des Skripts immer noch der Böse-böse-Wert in der Registry, aber das Flag.txt existiert.

Falls der zweite Fall bei euch vorkommen kann, dann solltest du
  • Wenn kein Flag.txt existiert (du also im Mach-Was-Zweig des Schnipsels bist)
  • nach dem REG DELETE
  • nochmals eine Überprüfung stattfinden nicht auf einen Errorlevel, sondern auf "Gibt es JETZT noch einen Böse-böse-Wert in der Registry?"

Grüße
Biber
Bitte warten ..
Mitglied: 60730
05.08.2010 um 00:36 Uhr
Zitat von Biber:
Moin suvv7777,

das finde ich vom Ansatz her schon praktikabler.

Es bleiben aber noch zwdrei Fälle übrig, in denen....hm... auf Optimierungspotential geprüft werden könnte.

Fall c)

Du klemmst den Teil aus dem Login raus und zwei Tage später bekommst du ne rothaarige Praktikantin und legst die im AD & Citrix an.

Dafür hätte ich mit Fall B eher kein Problem - hab ich schon mal kixtart als loginscripttool lobend erwähnt

01.
if not exist "%userprofile%\flag.txt" regedit /e "%userprofile%\flag.txt" "HKCU\Software\Microsoft\Office\11.0\Common\UserInfo" 
02.
find "410064006D0069006E006900730074007200610074006F0072000000" "%userprofile%\flag.txt" || goto weiter 
03.
REG DELETE "HKCU\Software\Microsoft\Office\11.0\Common\UserInfo" /v "Username" /f 
04.
echo "UserInfo bereinigt">>"%userprofile%"\flag.txt 
05.
attrib +h "%userprofile%\flag.txt" 
06.
 
07.
:weiter
ungetestet siehe @echo off

Gruß
Bitte warten ..
Mitglied: suvv7777
05.08.2010 um 18:15 Uhr
Hi ihr beiden!

also ich fange mal an eure Fälle abzuarbeiten: ;)

Fall A: Kein Problem, es legt sich alles zur Not wieder vernünftig an. Habe das nun ausreichend getestet.
Fall B: Kann eigentlich nicht sein. Und wenn doch, dann wird es bei vereinzelten Usern auftreten, so dass es zur Not manuell korrigiert werden kann.
Fall C: Kann nicht vorkommen: Erstens haben wir keine rothaarigen Praktikantinnen und zweitens habe ich die Default Terminal Server Registry (aus der sich neue Nutzer unter Citrix standardmäßig ihre HKCU ziehen und wo der böse böse Wert überhaupt erst herkam) bereits entsprechend angepasst.

Nochmals vielen Dank für die HIlfe! Ich habe mal wieder sehr viel gelernt.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

Windows Server
Bitlocker Key per Batch - Loginscript ablegen (5)

Frage von dgrebner zum Thema Windows Server ...

Windows Systemdateien
gelöst Registry-Schlüssel per Batch auslesen und in Datei schreiben (9)

Frage von Philzip zum Thema Windows Systemdateien ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...