
В этой небольшой заметке я покажу вам, как запустить несколько команд cmd или PowerShell в одной строке. Иногда это нужно делать, когда вы вызываете команды PowerShell из внешних программ, планировщика задач Windows, сценариев входа в систему, когда вам нужно обойти политику выполнения PowerShell или когда вам нужно быстро передать часть кода пользователю для диагностики/устранения проблем на его компьютере.
Выполнение нескольких команд в одной строке в Windows CMD
Вы можете использовать &
оператор cmd для запуска нескольких команд в одной строке. Например:
net stop wuauserv & net start wuauserv & wuauclt /detectnow
Если вы хотите, чтобы вторая команда выполнялась только в том случае, если предыдущая была успешной, используйте параметр &&
формат:
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 перезапустит службу 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.
$PSVersiontable
.The &&
оператор запускает команды PowerShell, расположенные справа от него, если команда, расположенная слева, была выполнена успешно:
Write-host "Hello!" && Write-host "World!"
The ||
используется, когда нужно выполнить команду, если предыдущая команда вернула ошибку:
get-service servicename || write-host "missing service"