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

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

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

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

net stop wuauserv & net start wuauserv & wuauclt /detectnow

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

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

ipconfig /flushdns && ipconfig /renew

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

net stop wuauserv6 || net start wuauserv

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

Если использовать символ амперсанда для разделения команд в одной строке, возникнет следующая ошибка:

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

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

restart-service wuauserv -verbose; get-process notepad

цепочка из нескольких команд PowerShell в одной строкецепочка из нескольких команд PowerShell в одной строке

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

Популярным примером сокращения команд в PowerShell является pipe, который позволяет передавать результат одной команды следующей с помощью конвейера. В PowerShell для этого используется символ «|» используется в качестве оператора трубопровода. Вот пример конвейерной команды:

Get-Service -Name wususerv | Stop-Service

Один и тот же код может быть написан целиком в нескольких строках:

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

Конвейер позволяет уменьшить размер кода, а сам код стал более простым и читаемым.

Чтобы запустить несколько команд PowerShell с помощью меню Пуск -> Выполнить, используйте следующий формат:

powershell -command &"{ipconfig /all; ping woshub.com; pause "Press any key to continue"}"

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

powershell -command {ipconfig /all; ping woshub.com; pause "Press any key to continue"}

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

c:\windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command {Get-EventLog -LogName security; ipconfig /all ; get-service servicename}"

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

Проверить версию PowerShell можно, выполнив команду $PSVersiontable.

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

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

&& powershell operator: выполнит правый конвейер, если левый был успешным&& powershell operator: выполнит правый конвейер, если левый преуспел

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

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

условный цепной конвейер в powershell 7условно цепной конвейер в powershell 7

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *