пятница, 15 мая 2015 г.

[Powershell] Передача двойных кавычек в качестве параметра команды

Ни для кого не секрет, что простой код PowerShell гораздо приятнее запускать одной командой, используя параметр -Command, чем писать скрипт, сохранять его в текстовый файл, писать для него батник, запускать ISE, а самое главное - по умолчанию запуск скриптов вообще запрещен! 

Намного удобнее просто открыть командный интерпретатор cmd.exe или просто меню Пуск>Выполнить, вбить команду и насладиться полученным результатом.

Для запуска такого кода я использую конструкцию powershell -noexit -command "& {}", а свой код помещаю внутрь фигурных скобок. Убрав параметр -noexit, окно автоматически закроется.

Основная проблема до недавнего времени крылась в том, что я не знал как передать двойные кавычки внутрь фигурных скобок. Они попросту не обрабатывались. Например:

powershell -noexit -command "& {$a = "some text"; $a}"



НО, powershell -noexit -command "& {"notepad.exe"}" прекрасно работает.

Я мучился с одинарными кавычками, облазил пол-Интернета, даже нашел как экранировать двойные кавычки с помощью символа `. Но разгадка оказалась простой донельзя. Нужно просто поставить перед кавычкой обратный слэш \!

powershell -noexit -command "& {$a = \"some text\"; $a}"

И чудо, все работает! И теперь можно запускать огромные куски кода одной строкой. Для разделения команд не забудьте использовать точку с запятой ;

ПРИМЕР

1 комментарий:

  1. Круто, спасибо. По максимуму всегда изворачивался что бы использовать одинарные кавычки, но тут никак не обойти было. Работал еще вариант с нечетным числом двойных кавычек:
    """sometext""
    Но работает только само по себе. Внутри цикла for все сразу же разваливается.

    ОтветитьУдалить