lcer00
Goto Top

Powershell komisches Verhalten mit Systemvariablen

Hallo zusammen,

mit ist heute ein Problem untergekommen, das ich nicht so richtig nachvollziehen kann. Ich hatte in einem administrativen powershell-Fenster einen offline Domänenjoin (wobei es nicht um diesen geht!) durchführen wollen:

PS C:\tmp> djoin /requestODJ /loadfile C:\PC.txt /windowspath %systemroot% /localos
Das führt zu einem Fehler, offenbar klappt die Auflösung der Variable systemroot nicht richtig und djoin findet die Windows-Installation nicht.

Starte ich hingegen eine cmd.exe funktioniert die Zeile (logisch):
C:\tmp> djoin /requestODJ /loadfile C:\PC.txt /windowspath %systemroot% /localos
ebenso funktioniert natürlich folgendes in Powershell:
PS C:\tmp> djoin /requestODJ /loadfile C:\PC.txt /windowspath $env:systemroot /localos

Unter folgendem Link: https://www.dtonias.com/offline-domain-join-active-directory/ gibt es nun den Hinweis, die Zeile in Powershell wie folgt zu ändern:
PS C:\tmp> djoin --% /requestODJ /loadfile C:\RODC.txt /windowspath %systemroot% /localos
das tatsächlich funktioniert.

Nur warum ist das so? Ich finde dazu nichts dokumentiert (nichts bei djoin, Powershell-Umgebungsvariablen)! Hat jemand einen Idee?

Grüße

lcer

Content-ID: 3337656560

Url: https://administrator.de/forum/powershell-komisches-verhalten-mit-systemvariablen-3337656560.html

Ausgedruckt am: 08.04.2025 um 23:04 Uhr

colinardo
Lösung colinardo 14.07.2022 aktualisiert um 13:10:42 Uhr
Goto Top
Servus Icer.
Nur warum ist das so?
Weil beim Token --% alles was dahinter kommt nicht mehr durch die Powershell geparst wird, also alles was dahinter steht so ohne Änderung an den Befehl übergeben wird ohne das Variablenexpansion oder Escaping etc. nach PS Regeln stattfinden, Außnahme sind Systemvariablen nach %var% Syntax:
Das Stop-Parsing-Token
https://ss64.com/ps/stop-parsing.html
Wenn ein Stop-Parsing-Token auftritt, behandelt PowerShell die verbleibenden Zeichen in der Zeile als Literal. Die einzige Interpretation, die sie ausführt, besteht darin, Werte für Umgebungsvariablen zu ersetzen, die standardmäßige Windows Notation verwenden, z%USERPROFILE%. B. .

Grüße Uwe
lcer00
lcer00 14.07.2022 um 13:16:36 Uhr
Goto Top
Super. Danke für den Hinweis.

( face-smile ich nehme djoin, weil ich bei Powershell keine Möglichkeit zum Offline-Domänenjoin gefunden habe. )

Grüße

lcer