Как запустить несколько команд в одной строке в PowerShell?

269

В командной строке cmd вы можете запустить две команды в одной строке следующим образом:

ipconfig /release & ipconfig /renew

Когда я запускаю эту команду в PowerShell, я получаю:

Ampersand not allowed. The `&` operator is reserved for future use

Есть ли в PowerShell оператор, позволяющий быстро создать эквивалент команды &в командной строке?

Подойдет любой способ запуска двух команд в одной строке. Я знаю, что могу сделать сценарий, но я ищу что-то еще более неуместное.

Дэвид
источник
5
Замечание: между последовательными портами и сериализацией этот вопрос практически невозможно найти.
Дэвид
Быть всезнайкой ... Это очень легко найти. Просто довольно сложно получить соответствующий набор хитов. :) (+1 за отличный вопрос)
Конрад Вилтерстен
1
Аналогично условному выполнению (&& и ||) в powershell .
JamesThomasMoon1979

Ответы:

384

Используйте точку с запятой для объединения команд в PowerShell:

ipconfig /release; ipconfig /renew
Squeezy
источник
9
Будут ли они работать параллельно или последовательно?
Таркус
19
Это запустит их последовательно, как и оператор & в cmd.exe.
Squeezy
43
Хотя есть большая разница - ";" запускает вторую команду, даже если первая не удалась.
Иван
10
Как упоминалось выше, это также поведение & в cmd.exe.
Squeezy
7
@Rafi Да, попробуй {Command-One -ea Stop} Catch {Command-Two}
Dave_J
30

Точка с запятой свяжет команды, как указано в предыдущем ответе , хотя есть ключевое отличие в поведении &оператора в интерпретаторе команд в стиле MS-DOS.

В интерпретаторе команд подстановка переменных происходит при чтении строки. Это допускает некоторые полезные возможности, такие как обмен переменных без промежуточного:

set a=1
set b=2
set a=%b% & set b=%a%
echo %a%
echo %b%

Приведет к:

2
1

Насколько я знаю, в PowerShell нет способа воспроизвести это поведение. Некоторые могут утверждать, что это хорошо.

На самом деле есть способ сделать это в PowerShell:

$b, $a = $a, $b

Это приведет к замене значений переменной на одну строку.

Dave_J
источник
Похоже, не работает из поля «Target» с параметром -command в
ярлыке