Если запускать командлеты из сценария PowerShell, можно хранить аргументы, которые нужно передать командлету, в массиве или в хэш-таблице. Затем при запуске командлета можно поставить перед именем переменной символ (Э, который называется силяш-оператором (splat), и его применение приводит к извлечению содержимого хэш-таблицы или массива и помещению каждого элемента в командную строку или в вызов функции, как будто это были отдельно набранные аргументы. Порядок элементов, выходящих из хэш-таблицы, имеет, по сути, произвольный характер, поэтому хэш-таблицы должны использоваться только для хранения аргументов, порядок следования которых не имеет значения. Для хранения аргументов, порядок следования которых имеет значение, следует использовать массивы. Это проще показать, чем описать. В данном сценарии: PowerShell берет хэш-таблицу и массив и помещает их содержимое в командную строку. Эффект получается такой же, как если бы вы набрали cmdlet — flag — option=value filel file2 file3
В общем, можно помещать переменные, которые содержат текст, в любое место командной строки, но при этом нужно знать, что отдельная переменная всегда воспринимается как отдельный аргумент командной строки. Поясню, что я имею в виду. Возьмем типичную команду: din — necunse c:usens
Которая выводит список содержимого папки с: users и всех содержащихся в ней подчиненных папок. Следующие команды: не дают того же результата. Вместо вывода списка содержимого каталога выводится сообщение об ошибке, потому что не существует папки по имени — necunse с: usens. Это существенное различие между PowerShell и миром старого окна командной строки. В cmd. exe переменные среды окружения расширяются до выполнения команды, поэтому отдельная переменная может рассматриваться как более чем один аргумент. В PowerShell переменные, использующиеся как аргументы командной строки, рассматриваются как одно значение аргумента.