Пробелы между параметрами в команде Powershell
Я хочу знать, почему, когда я пропускаю пробелы между параметрами в команде 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
имеют следующее значение: invoke wmic
с тремя аргументами: строка desktopmonitor
строка get
и массив с двумя строками 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