![Пробелы между параметрами в команде Powershell](https://rvso.com/image/1481892/%D0%9F%D1%80%D0%BE%D0%B1%D0%B5%D0%BB%D1%8B%20%D0%BC%D0%B5%D0%B6%D0%B4%D1%83%20%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%B0%D0%BC%D0%B8%20%D0%B2%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B5%20Powershell.png)
Я хочу знать, почему, когда я вставляю пробелы между параметрами в команде 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