stoepsu77
Goto Top

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

Content-ID: 625248

Url: https://administrator.de/forum/registry-schluessel-mit-platzhalter-via-batch-aendern-625248.html

Ausgedruckt am: 22.12.2024 um 13:12 Uhr

Doskias
Doskias 24.11.2020 aktualisiert um 16:09:52 Uhr
Goto Top
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:
Get-ChildItem -Path Registry::HKEY_CLASSES_ROOT\CLSID\ |Select name |? name -like "*{0E270DAA-1BE6-48F2-*"  
stoepsu77
stoepsu77 24.11.2020 um 16:22:55 Uhr
Goto Top
Danke Doskias

mit PowerShell bin ich leider nicht so auf Du und Du.

Der Key ist im Windows Explorer der Eintrag AdobeCreativeCloud. Den möchte oder muss weg.
Der Unterschlüssel verändert nur, ob man diesen Eintrag sieht oder nicht.
0 = ich sehe den nicht; 1= wird angezeigt.

Ich dachte mir eigentlich per GPO den Wert zu ändern. Das muss nur einmal gemacht werden. Dann ist die Anzeige im Windows-Explorer weg.

Eben ich und PowerShell....
Wie speichere ich den Wert in eine Variable und wie kann ich dann den Unterschlüssel via PowerShell ändern?

Grüsse
BeMe
Doskias
Doskias 24.11.2020 aktualisiert um 16:32:32 Uhr
Goto Top
Hab jetzt kein System zum testen da, aber:

# 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 ;)
stoepsu77
stoepsu77 24.11.2020 um 17:20:02 Uhr
Goto Top
Danke

bei der set Zeile bringt er mir immer einen Fehler
"C:\Users\username\@{Name=HKEY_CLASSES_ROOT\CLSID\{0E270DAA-1BE6-48F2-AC49-8B7BA32DCF51}}"

Warum geht er hier nach c: ?
Doskias
Doskias 24.11.2020 um 17:39:50 Uhr
Goto Top
weil der nicht weiß dass er in die Registry soll. da nimmt er den aktuellen Pfad. Hab ich in der schnelle vergessen. Versuch mal

$Pfad="REGISTRY::"+$key -replace '@{Name=','' -replace '}',''  
ricardobohner
ricardobohner 25.11.2020 um 00:13:51 Uhr
Goto Top
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
Doskias
Doskias 25.11.2020 um 08:23:41 Uhr
Goto Top
So. ich hab das ganze jetzt mal an meinem Test-PC getestet

$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 face-smile ) 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.
stoepsu77
stoepsu77 25.11.2020 aktualisiert um 08:56:26 Uhr
Goto Top
Hallo Doskias

Ich danke Dir ganz doll.
Bei mir geht es nicht obschon ich es mit Admin Rechten ausführe.
Ich kriege am Ende immer

'Set-ItemProperty : Der Vorgang wurde nicht verarbeitet. Der angegebene Speicherort lässt diesen Vorgang nicht zu.
'In Zeile:1 Zeichen:1
'+ Set-ItemProperty -Path $Pfad System.IsPinnedToNameSpaceTree -Value 0 ...
'+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' + CategoryInfo : InvalidArgument: (:String) [Set-ItemProperty], InvalidOperationException
' + FullyQualifiedErrorId : InvalidContainer,Microsoft.PowerShell.Commands.SetItemPropertyCommand

Wenn ich Zeile 1 + 2 ausführe motzt er nicht scheint alles gut.
Aber machen tut er dann nichts.
stoepsu77
stoepsu77 25.11.2020 um 08:41:09 Uhr
Goto Top
Hallo Ricardobohner

Brillant!
das klappt!

vielen vielen Dank!

Ihr seit hier echt die Besten!

Echt genial, danke
Doskias
Doskias 25.11.2020 um 11:56:47 Uhr
Goto Top
Gemäß den Forenregeln dann bitte noch die Lösung markieren, damit andere es künftig schneller finden.
stoepsu77
stoepsu77 25.11.2020 um 12:03:57 Uhr
Goto Top
Hab ich das nicht?
Ich habs doch als gelöst markiert
Doskias
Doskias 25.11.2020 um 12:05:26 Uhr
Goto Top
Deine Frage ja, aber nicht den Beitrag bzw. die Beiträge die zur Lösung beigetragen haben
stoepsu77
stoepsu77 25.11.2020 um 12:19:31 Uhr
Goto Top
Das wür ich grad sehr gerne tun, nur find ich nicht raus, wie?
Ausser Herzen setzen find ich nichts gescheites.