
Я хочу знать, почему, когда я вставляю пробелы между параметрами в команде PowerShell, у меня возникают ошибки:
Спробел: (не работает)
wmic desktopmonitor get screenwidth, screenheight
Expression GET non valide.
Безпространство: (работа)
wmic desktopmonitor get screenwidth,screenheight
ScreenHeight ScreenWidth
Это нормально? Потому что я вижу много команд в интернете, которые задаются с пробелами!
Обновление 27/01/2016 Подробности версии:
$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 {1.0, 2.0, 3.0, 4.0...}
PSRemotingProtocolVersion 2.3
Оба способа (с пробелом и без) работают с CMD, но только второй способ (без пробела) работает с PowerShell (см. снимки экрана ниже):
решение1
Запятая — оператор массива в PowerShell. Поэтому ваша команда:
wmic desktopmonitor get screenwidth, screenheight
имеют следующее значение: вызов wmic
с тремя аргументами: string desktopmonitor
, string get
и array с двумя string screenwidth
и screenheight
. Поскольку wmic
PowerShell является собственным приложением, он должен преобразовать аргументы в командную строку. PowerShell использует пробел в качестве разделителя при преобразовании массива в командную строку. Таким образом, результирующая командная строка будет выглядеть следующим образом:
wmic desktopmonitor get screenwidth screenheight
Это можно увидеть, введя следующую команду:
cmd /c echo wmic desktopmonitor get screenwidth, screenheight
Начиная с PowerShell v5 здесь есть один особый случай. Если массив предоставлен напрямую (не как подвыражение) и между запятыми и элементами массива нет пробелов, то PowerShell использует запятую в качестве разделителя при преобразовании массивов в командную строку.
PS> cmd /c echo 1,2,3 (4,5,6) 7,8 ,9
1,2,3 4 5 6 7 8 9
Эта команда:
wmic desktopmonitor get screenwidth,screenheight
соответствует этому особому случаю, и результирующая командная строка будет следующей:
wmic desktopmonitor get screenwidth,screenheight