Запуск нескольких команд в одну строку в PowerShell и CMD

Запуск нескольких команд в одну строку в PowerShell и CMD

В этой небольшой заметке рассмотрим, как выполнить несколько cmd или PowerShell команд в одной строке. Такая задача периодически возникает при вызове команд PowerShell из внешних программ, из планировщика заданий Windows, логон скриптов, когда нужно обойти политику выполнения скриптов PowerShell, или когда нужно быстро передать пользователю кусок кода для выполнения при диагностике/ исправлении проблем на компьютере.

Выполнение нескольких команд в консоли CMD

В cmd для последовательного запуска команд в одной строке используется оператор
&
. Например:

net stop wuauserv & net start wuauserv & wuauclt /detectnow

выполнить несколько последовательных команда в cmd

Если нужно, чтобы вторая команда выполнялась только после успешного выполнения первой, используются формат
&&
:

ipconfig /flushdns && ipconfig /renew

Можно использовать и обратное условие: вторая команда будет выполнена, только если первая вернула ошибку:

net stop wuauserv6 || net start wuauserv

Запуск нескольких команд PowerShell в одной строке

В PowerShell если использовать знак амперсанда для разделения команд в одной строке, появится ошибка:

The ampersand (&) character is not allowed. The & operator is reserved for future use;

Вместо знака & для разделения команд PowerShell в одной строке используется символ точка с запятой (
;
):

restart-service wuauserv -verbose; get-process notepad

запуск нескольких командлетов powershell в одну строку

Эта однострочная PowerShell команда перезапустит службу Windows и после завершения первой команды выведет информацию о процессе.

Популярным примером сокращения команд в PowerShell является конвейеры (pipe/pipeline), которые позволяют передать результаты одной команды следующей по конвейеру. В PowerShell в качестве оператора конвейера используется символ “|”. Например, пример команды с конвейером:

Get-Service -Name wususerv | Stop-Service

Этот же код в полном виде можно записать в несколько строк:

$service = Get-Service -Name wususerv
$serviceName = $service.Name
Stop-Service -Name $serviceName

Получилась неплохая экономия по размеру кода, а код стал даже более простым и читаемым.

Для запуска нескольких команда PowerShell через меню Пуск -> Выполнить, используйте формат:

powershell -command &"{ipconfig /all; tracert yandex.ru; pause "Press any key to continue"}"

Если вы запускаете эти же команды через консоль powershell, используйте синтаксис:

powershell -command {ipconfig /all; tracert yandex.ru; pause "Press any key to continue"}

При запуске нескольких команд PowerShell через планировщик Windows, можно использовать такой формат:

c:windowsSystem32WindowsPowerShellv1.0powershell.exe -Command {Get-EventLog -LogName security; ipconfig /all ; get-service servicename}"

В версии PowerShell Core 7.x доступны новые операторы && и ||. Они работают так, же как в cmd.

Оператор
&&
выполнит команды PowerShell справа от себя, если команда слева выполнена успешно:

Write-host "Hello!" && Write-host "World!"

условные команды в одной строке powershell

Оператор
||
используется, когда нужно выполнить команду, если первая команда вернула ошибку:

get-service servicename || write-host "missing service"

выполнить вторую команду powershell, если первая вернула ошибку

Windows 10
Запуск нескольких команд в одну строку в PowerShell и CMD