blacksun
Goto Top

Registry abfragen, Pfad enthält Umlaute, kaufmännisches "und" sowie Leerzeichen

Hallo,

ich möchte per Powershell in der Registry abfragen ob ein Schlüssel existiert.
Dummerweise hat der Pfad dorthin Umlaute, das kaufmännische Und sowie Leerzeichen.

Wie muss ich den Pfad richtig angeben?

Beispiel:
Test-Path HKCU:\Software\Würstchen & Senf\Salz & Pfeffer

Wie muss dies formatiert werden damit die Abfrage ein "True" liefert?

keine Ahnung wie man als Programmierer einer Software auf die Idee kommt solche Pfade zu verwenden. Ich muss nun damit halt umgehen.

Vielen Dank.

Content-ID: 61055870154

Url: https://administrator.de/contentid/61055870154

Ausgedruckt am: 22.11.2024 um 10:11 Uhr

ipzipzap
ipzipzap 26.09.2023 um 20:07:48 Uhr
Goto Top
Moin,

probier mal so in etwa:

Get-ItemProperty -Path "Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\Würstchen & Senf\Salz & Pfeffer"  

cu,
ipzipzap
DarkZoneSD
Lösung DarkZoneSD 26.09.2023 aktualisiert um 21:16:59 Uhr
Goto Top
Moin
probier mal so in etwa:

Get-ItemProperty -Path "Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\Würstchen & Senf\Salz & Pfeffer"  
Zusätzlich kannst Du statt -Path den -LiteralPath benutzen um ganz sicher zu gehen, dann nimmt er den string genau so auf wie er zwischen den Anführungszeichen steht und achtet nicht auf scherze wie [ ] oder sonstige Zeichen face-smile
cu,
ipzipzap
Grüße

Zusätzlich noch, Du kannst Deinen Beitrag in die Powershell Kategorie packen, die passt ein bisschen besser als "Batch, Shell" face-smile
7907292512
Lösung 7907292512 26.09.2023 aktualisiert um 21:30:46 Uhr
Goto Top
Single Quotes drum und zur Sicherheit, wie ipzipzap schon schreibt, -LiteralPath Parameter verwenden
Test-Path -LiteralPath 'HKCU:\Software\Würstchen & Senf\Salz & Pfeffer'  
Skript selbst sollte bezüglich Umlaute als UTF-8 mit BOM gespeichert werden.

Sid.
mayho33
Lösung mayho33 26.09.2023 aktualisiert um 22:50:00 Uhr
Goto Top
Kommentar von @blacksun:
Beispiel:
Test-Path HKCU:\Software\Würstchen & Senf\Salz & Pfeffer

Wie immer! Alles in Anführungszeichen stellen!
Test-Path "HKCU:\Software\Würstchen & Senf\Salz & Pfeffer"  
#oder
Test-Path 'HKCU:\Software\Würstchen & Senf\Salz & Pfeffer'  

Funktioniert bei mir einwandfrei...
regtest

mit if:
$result = if(Test-Path -Path "REGISTRY::HKEY_CURRENT_USER\SOFTWARE\Würstchen und Senf") {"IST WAHR!!"} else {"IST FALSCH!"}  

$result
IST WAHR!!

Wenn du in Powershell die Registry ansprichst ist es hilfreich das mit dem Provider "REGISTRY::" einzuleiten:

https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell ...

https://learn.microsoft.com/de-de/powershell/scripting/samples/working-w ...
blacksun
blacksun 27.09.2023 aktualisiert um 11:43:02 Uhr
Goto Top
Vielen Dank euch allen,
ich hab von jedem eurer Antworten was benötigt.

Bei meinem Einsatzzweck, der Nutzung in einer Batch, sieht das so aus:

@echo off & setlocal
chcp 1252
powershell -Command "& {Test-Path -LiteralPath 'REGISTRY::HKCU\Software\Würstchen & Senf\Salz & Pfeffer';}"  

jetzt muss ich nur noch rausfinden wie ich die Antwort in eine Variable der Batch bekomme, also dass das "True" oder "False" in %value" landet.
7907292512
Lösung 7907292512 27.09.2023 aktualisiert um 12:11:37 Uhr
Goto Top
jetzt muss ich nur noch rausfinden wie ich die Antwort in eine Variable der Batch bekomme, also dass das "True" oder "False" in %value" landet.
For-Loop ist dein Freund
@echo off & setlocal
chcp 1252
for /f "delims=" %%a in ('powershell -EP Bypass -C "Test-Path -LiteralPath 'REGISTRY::HKCU\Software\Würstchen & Senf\Salz & Pfeffer'"') do set "value=%%a"  
echo Ergebnis: %value%

Aber wozu hier Powershell in Batch einbauen für etwas was die CMD schon von Haus aus mit reg query beherrscht 🙃?
@echo off & setlocal
chcp 1252
reg query "HKCU\Software\Würstchen & Senf\Salz & Pfeffer" >nul 2>&1 && (  
    echo Key ist  vorhanden
) || (
   echo Key ist nicht vorhanden
)
blacksun
blacksun 27.09.2023 aktualisiert um 12:37:33 Uhr
Goto Top
Zitat von @7907292512:
@echo off & setlocal
chcp 1252
reg query "HKCU\Software\Würstchen & Senf\Salz & Pfeffer" >nul 2>&1 && (  

weil ein Admin über mir gemeint hat dass man regedit.exe und reg.exe usw bei der Ausführung im Userkontext eines Nicht-Admin sperren müsse

Powershell kann ja auch in die Registry schreiben.
Kann Powershell eigentlich auch reg-Dateien selbst importieren, ohne regedit oder reg zu benutzen?
Sonst muss ich meine ganzen reg-Dateien in powershell-Befehle umbauen.
7907292512
7907292512 27.09.2023 aktualisiert um 12:43:23 Uhr
Goto Top
Zitat von @blacksun:
weil ein Admin über mir gemeint hat dass man regedit.exe und reg.exe usw bei der Ausführung im Userkontext eines Nicht-Admin sperren müsse
Na super und dann die Powershell weiterhin zulassen, wat fürn Pfusch am Bau 😂. Wahrscheinlich wieder mal so ein Admin der noch nie was von Powershell gehört hat.
Powershell kann ja auch in die Registry schreiben.
Kann Powershell eigentlich auch reg-Dateien selbst importieren, ohne regedit oder reg zu benutzen?
Nicht das ich wüsste.
Sonst muss ich meine ganzen reg-Dateien in powershell-Befehle umbauen.
Oder das reg File selbst parsen.
DarkZoneSD
DarkZoneSD 27.09.2023 um 14:44:01 Uhr
Goto Top
Kann Powershell eigentlich auch reg-Dateien selbst importieren, ohne regedit oder reg zu benutzen?
Du kannst dich gerne mal durch die .Net Registry Functions wursteln und schauen ob es etwas gibt das deinen Vorstellungen entspricht.

Grüße

Florian
mayho33
mayho33 27.09.2023 aktualisiert um 15:19:01 Uhr
Goto Top
Zitat von @DarkZoneSD:

Kann Powershell eigentlich auch reg-Dateien selbst importieren, ohne regedit oder reg zu benutzen?
Du kannst dich gerne mal durch die .Net Registry Functions wursteln und schauen ob es etwas gibt das deinen Vorstellungen entspricht.

Grüße

Florian

Wenn du meinst ob es eine eigene Funktion gibt, dann nein. Du kanns aber z.B. das machen:
Start-Process -Filepath "cmd.exe" -Argumentlist "/c REG IMPORT $([CHAR]34)C:\Mein reg-file Pfad$([CHAR]34)"   
7907292512
7907292512 27.09.2023 aktualisiert um 15:52:03 Uhr
Goto Top
Zitat von @mayho33:
Wenn du meinst ob es eine eigene Funktion gibt, dann nein. Du kanns aber z.B. das machen:
Start-Process -Filepath "cmd.exe" -Argumentlist "/c REG IMPORT $([CHAR]34)C:\Mein reg-file Pfad$([CHAR]34)"   

Wenn reg und regedit gesperrt sind wie er oben ja schon schreibt, bringt das auch nichts die Befehle über die Powershell auf der CMD auszuführen sie sind dort ja auch gesperrt 🙃. Posts vollständig lesen hilft ...
mayho33
mayho33 27.09.2023 aktualisiert um 16:05:34 Uhr
Goto Top
Zitat von @7907292512:

Zitat von @mayho33:
Wenn du meinst ob es eine eigene Funktion gibt, dann nein. Du kanns aber z.B. das machen:
Start-Process -Filepath "cmd.exe" -Argumentlist "/c REG IMPORT $([CHAR]34)C:\Mein reg-file Pfad$([CHAR]34)"   

Wenn reg und regedit gesperrt sind wie er oben ja schon schreibt, bringt das auch nichts die Befehle über die Powershell auf der CMD auszuführen sie sind dort ja auch gesperrt 🙃. Posts vollständig lesen hilft ...

Ei, ei, ei... Das mit dem sinnerfassenden Lesen... 😅😅

Als ob man reg.exe und regedit sperren müsste für User ohne administrative Rechte 🤦‍♂️🤦‍♂️. Ob die Admins denn wissen, dass man dann nur HKCU beschreiben kann?

Dann doch besser die lokalen Admins ausdünnen! Aber was weiß ich schon.

OK! Dann mach das natürluch keinen Sinn, wenn die Reg.exe für User gesperrt ist.
Start-Process -Filepath "cmd.exe" -Argumentlist "/c REG IMPORT $([CHAR]34)C:\Mein reg-file Pfad$([CHAR]34)"    

Ich wage aber fast zu behaupten, dass es funktioniert, wenn man die PS als SYSTEM laufen lässt.
#als Administrator in der comspec
Psexec.exe -s powershell.exe -ep bypass -file "hier ist der PS Reg Import hinterlegt.ps1"  

Oder so:
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell ...