Запуск нескольких команд в одну строку в 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 можно, выполнив $PSVersiontable.

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

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

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

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

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

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

EnglishRussianUkrainian