Registry Schlüssel mit Platzhalter via Batch ändern
Hallo an Alle
ich suche gerade eine Möglichkeit einen Registry Schlüssel zu ändern.
Nur ist das Problem, dass der Schlüssel sich verändert.
Also dieser Wert
HKEY_CLASSES_ROOT\CLSID\{0E270DAA-1BE6-48F2-AC49-8B7BA32DCF51}
ist nur immer bis
HKEY_CLASSES_ROOT\CLSID\{0E270DAA-1BE6-48F2-
immer gleich.
Nun dachte ich an einen Platzhalter, aber irgendwie geht das nicht.
eigentlich müsse der unter Schlüssel
System.IsPinnedToNameSpaceTree von 1 auf 0 geändert werden.
Da aber schon der Schlüssel selber nicht gefunden wir, geht das nicht.
REG QUERY HKEY_CLASSES_ROOT\{0E270DAA-1BE6-48F2-AC49-*} /v System.IsPinnedToNameSpaceTree
Wert wurde nicht gefunden.
Welchen Platzhalter muss man den verwenden?
Danke
BeMe
ich suche gerade eine Möglichkeit einen Registry Schlüssel zu ändern.
Nur ist das Problem, dass der Schlüssel sich verändert.
Also dieser Wert
HKEY_CLASSES_ROOT\CLSID\{0E270DAA-1BE6-48F2-AC49-8B7BA32DCF51}
ist nur immer bis
HKEY_CLASSES_ROOT\CLSID\{0E270DAA-1BE6-48F2-
immer gleich.
Nun dachte ich an einen Platzhalter, aber irgendwie geht das nicht.
eigentlich müsse der unter Schlüssel
System.IsPinnedToNameSpaceTree von 1 auf 0 geändert werden.
Da aber schon der Schlüssel selber nicht gefunden wir, geht das nicht.
REG QUERY HKEY_CLASSES_ROOT\{0E270DAA-1BE6-48F2-AC49-*} /v System.IsPinnedToNameSpaceTree
Wert wurde nicht gefunden.
Welchen Platzhalter muss man den verwenden?
Danke
BeMe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 625248
Url: https://administrator.de/contentid/625248
Ausgedruckt am: 21.11.2024 um 18:11 Uhr
13 Kommentare
Neuester Kommentar
Moin,
kannst du das etwa genauer erläutern. Also zum Beispiel:
- Was macht der Key?
- Wann verändert sich der Schlüsel? Pro Rechner, Beim Update`?
- Wie willst du den Schlüssel ändern? im laufenden Betrieb? Bei der Anmeldung? Per GPO?
Ansonsten: Wenn der Anfang immer gleich ist, dann frag doch erst mit Powershell mittels get-child-item in der Registry ab ob es einen Schlüssel gibt, der so beginnt wie du schreibst, speichere das Ergebnis in eine Variable und schon hast du den Pfad immer zur Verfügung, unabhängig davon wie er wirklich heißt.
Gruß
Doskias
Nachtrag:
kannst du das etwa genauer erläutern. Also zum Beispiel:
- Was macht der Key?
- Wann verändert sich der Schlüsel? Pro Rechner, Beim Update`?
- Wie willst du den Schlüssel ändern? im laufenden Betrieb? Bei der Anmeldung? Per GPO?
Ansonsten: Wenn der Anfang immer gleich ist, dann frag doch erst mit Powershell mittels get-child-item in der Registry ab ob es einen Schlüssel gibt, der so beginnt wie du schreibst, speichere das Ergebnis in eine Variable und schon hast du den Pfad immer zur Verfügung, unabhängig davon wie er wirklich heißt.
Gruß
Doskias
Nachtrag:
Get-ChildItem -Path Registry::HKEY_CLASSES_ROOT\CLSID\ |Select name |? name -like "*{0E270DAA-1BE6-48F2-*"
Hab jetzt kein System zum testen da, aber:
Ohne Test und ohne Haftung ;)
Korrektur/Bearbeitung: zweites Replace war falsch ;)
# Key auslesen:
$Key=Get-ChildItem -Path Registry::HKEY_CLASSES_ROOT\CLSID\ |Select name |? name -like "*{0E270DAA-1BE6-48F2-*"
#reinen Pfad erzeugen
$Pfad=$key -replace '@{Name=','' -replace '}',''
# Einen Wert ändern
Set-ItemProperty -Path $Pfad System.IsPinnedToNameSpaceTree -Value 0 –Force
Ohne Test und ohne Haftung ;)
Korrektur/Bearbeitung: zweites Replace war falsch ;)
Hier ist meine Batch version: Video
@echo off
net session >nul 2>&1 || (powershell start -verb runas '%~0' &exit /b)
SetLocal EnableDelayedExpansion
chcp 1252 > nul
mode con: cols=100 lines=15
set SubSchluessel=HKEY_CLASSES_ROOT\CLSID
set PartSchluessel={0E270DAA-1BE6-48F2
set Wert=System.IsPinnedToNameSpaceTree
:: Schauen ob es in HKEY_CLASSES_ROOT\CLSID einen schluessel gibt der mit "{0E270DAA-1BE6-48F2" beginnt:
echo.
reg query "%SubSchluessel%" |find /i "%PartSchluessel%" > nul
IF not %errorlevel% EQU 0 (
Echo Fehler, der Schluessel konnte nicht gefunden werden!
echo.
pause
exit
)
:: Schluessel in Variable speichern:
for /f "delims=" %%a in ('reg query "%SubSchluessel%" ^|find /i "%PartSchluessel%"') do Set "Schluessel=%%a"
echo Es gibt ein Ergebinss: %Schluessel%
echo.
:: Hex daten von System.IsPinnedToNameSpaceTree in variable speichern (also etwas wie "0x1"):
for /f "tokens=3" %%a in ('reg query "%Schluessel%" /v "%Wert%"') do set "WertDatenHex=%%a"
:: Hex daten von WertDatenHex von Hex zu Nummern konvertieren:
set /a WertDatenNum=%WertDatenHex%
:: Falls WertDatenNum bereits "0" ist dann nix machen sonst auf 0 aendern:
IF not %WertDatenNum% EQU 0 (
echo Der Wert: %Wert% ist %WertDatenNum%
echo.
echo Wird jetzt auf 0 geandert...
echo.
timeout /t 5 > nul
reg add "%Schluessel%" /v "%Wert%" /t reg_dword /d 0 /f
if !Errorlevel! EQU 0 echo.& echo Alles Ok, "%Wert%" ist jetzt "0"
) else (echo Der Wert %Wert%: ist bereits "0" und muss nicht geandert werden...)
echo.
pause
So. ich hab das ganze jetzt mal an meinem Test-PC getestet
Ersetze Test in Zeile 1 durch deine Zeichenfolge {0E270DAA-1BE6-48F2- und es sollte (zumindest vom Code her) gehen. Wenn der Pfad nicht existiert bekommst du eine Fehlermeldung. Das kannst du dann ja (sozusagen als Übung ) mit einer If-Bedingung noch abfangen. Wenn der Pfad aber der Schlüssel nicht existiert, dann wird er angelegt. Existiert der Pfad nicht, gibt es wie gesagt eine Fehlermeldung.
$Key=Get-ChildItem -Path Registry::HKEY_CLASSES_ROOT\CLSID\ |Select name |? name -like "*Test*"
$Pfad="REGISTRY::"+$key -replace '@{Name=','' -replace '}',''
Set-ItemProperty -Path $Pfad System.IsPinnedToNameSpaceTree -Value 0 –Force
Ersetze Test in Zeile 1 durch deine Zeichenfolge {0E270DAA-1BE6-48F2- und es sollte (zumindest vom Code her) gehen. Wenn der Pfad nicht existiert bekommst du eine Fehlermeldung. Das kannst du dann ja (sozusagen als Übung ) mit einer If-Bedingung noch abfangen. Wenn der Pfad aber der Schlüssel nicht existiert, dann wird er angelegt. Existiert der Pfad nicht, gibt es wie gesagt eine Fehlermeldung.