Leerzeichen zwischen Parametern in einem Powershell-Befehl

1002
noraj

Ich möchte wissen, warum ich Fehler habe, wenn ich Leerzeichen zwischen Paramtern in einem Powershell-Befehl lasse:

Mit Leerzeichen: (funktioniert nicht)

wmic desktopmonitor get screenwidth, screenheight Expression GET non valide. 

Ohne Raum: (Arbeit)

wmic desktopmonitor get screenwidth,screenheight ScreenHeight ScreenWidth 

Ist das normal ? Weil ich im Internet viele Befehle mit Leerzeichen sehe!


Update 27.01.2016 Versionsdetail :

$PSVersionTable  Name Value ---- ----- PSVersion 5.0.10240.16384 WSManStackVersion 3.0 SerializationVersion 1.1.0.1 CLRVersion 4.0.30319.42000 BuildVersion 10.0.10240.16384 PSCompatibleVersions  PSRemotingProtocolVersion 2.3 

Beide Methoden (mit und ohne Leerzeichen) funktionieren mit CMD, aber nur die zweite (ohne Leerzeichen) mit PowerShell (siehe folgende Screenshots):

Cmd.exe

Power Shell

2
Welche Version von PowerShell und welche Windows-Version haben Sie? Diese Befehle sind BEIDE in der Eingabeaufforderung (nicht PowerShell in meinem Setup) gültig, aber BEIDE sind in meinem Setup in PowerShell in meiner Umgebung ungültig. Weitere Details Ihrer Umgebungskonfiguration können hilfreich sein. Wenn Sie die Möglichkeit haben, einen Screenshot oder einen Link hinzuzufügen, der ein funktionierendes und ein nicht funktionierendes Beispiel zeigt, kann dies ebenfalls hilfreich sein. Pimp Juice IT vor 8 Jahren 1
$ PSVersionTable, um die Version zu finden, die Sie verwenden. Michael Frank vor 8 Jahren 0
@ 1Fish_2Fish_RedFish_BlueFish: Ich wünschte, ich hätte auf deine Frage in meinem Update geantwortet. noraj vor 8 Jahren 0

1 Antwort auf die Frage

3
PetSerAl

Comma ist ein Array-Operator in PowerShell. Also dein Befehl:

wmic desktopmonitor get screenwidth, screenheight 

haben folgende Bedeutung: Aufruf wmicmit drei Argumenten: String desktopmonitor, String getund Array mit zwei Strings screenwidthund screenheight. Da wmices sich um eine native Anwendung handelt, muss PowerShell Argumente in eine Befehlszeile umwandeln. PowerShell verwendet Leerzeichen als Trennzeichen, wenn Sie ein Array in eine Befehlszeile umwandeln. Die folgende Befehlszeile wäre also:

wmic desktopmonitor get screenwidth screenheight 

Sie können das sehen, indem Sie folgenden Befehl eingeben:

cmd /c echo wmic desktopmonitor get screenwidth, screenheight 

Ab PowerShell v5 gibt es hier einen Sonderfall. Wenn das Array direkt bereitgestellt wird (nicht als Unterausdruck) und keine Leerzeichen zwischen Kommas und Array-Elementen vorhanden sind, verwendet PowerShell das Komma als Trennzeichen, wenn Arrays in die Befehlszeile umgewandelt werden.

PS> cmd /c echo 1,2,3 (4,5,6) 7,8 ,9 1,2,3 4 5 6 7 8 9 

Dieser Befehl:

wmic desktopmonitor get screenwidth,screenheight 

qualifizieren Sie sich für diesen Sonderfall, und die folgende Befehlszeile würde lauten:

wmic desktopmonitor get screenwidth,screenheight