Поиск по сайту:

Как приостановить выполнение в PowerShell


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

Существует несколько методов для приостановки скрипта PowerShell. Некоторые используют встроенные функции PowerShell, в то время как другие могут быть специфичными для системы.

В этой статье мы рассмотрим различные варианты приостановки PowerShell или ожидания команды для продолжения.

Приостановите PowerShell с помощью Start-Sleep

Самый распространенный способ приостановить выполнение скрипта PowerShell на определенный период времени - использовать команду Start-Sleep. Она позволяет вам определить, на сколько времени приостановить ваш скрипт в секундах или миллисекундах. Таким образом, чтобы приостановить выполнение вашего скрипта на 5 секунд, вы можете просто сделать:

Pause 5 seconds
Start-Sleep -Seconds 5

Or shorter options are:
Start-Sleep -s 5
Start-Sleep 5 # Default is in seconds

Чтобы использовать миллисекунды, просто используйте параметр -miliseconds. Другие варианты, такие как часы или минуты, недоступны. Так что, если вы хотите приостановить выполнение вашего скрипта на 5 минут, просто укажите 300 секунд вместо этого.

Если вы используете PowerShell 7, вы также можете использовать параметр -Duration, который принимает объект TimeSpan. Преимущество этого в том, что вы можете указать время ожидания в минутах или часах:

Start-Sleep -Duration (New-TimeSpan -Minutes 5)

Если вы хотите узнать больше о команде Start-Sleep и, например, о том, как использовать её с индикатором выполнения, то обязательно прочитайте эту статью, в которой я подробнее объясняю возможности.

Ждите команды с помощью Read-Host

Другим распространенным вариантом является ожидание команды в PowerShell, прежде чем скрипт продолжится. Чтобы приостановить ваши скрипты и дождаться команды, мы можем использовать командлет Read-Host. Это приостановит ваш скрипт и будет ждать нажатия любой клавиши для продолжения.

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

Read-Host -Prompt "Press any key to continue"

Мы также можем быть более конкретными с помощью Read-Host. Мы могли бы, например, спросить пользователя, хочет ли он продолжить или нет:

$continue = Read-Host -Prompt "Continue? [y/n]"

if ( $continue -eq 'n' ) { 
    Exit
}

Если вы действительно хотите ограничить варианты только Y или N, то мы можем использовать метод PromptForChoice() для этого. Это позволяет нам указать варианты, которые пользователь может выбрать:

$title    = 'Question'
$question = 'Are you sure you want to continue?'
$choices  = '&Yes', '&No'

$decision = $Host.UI.PromptForChoice($title, $question, $choices, 1)
if ($decision -eq 0) {
    Write-Host 'confirmed'
} else {
    Write-Host 'cancelled'
    Exit
}

Использование команды паузы

Другой простой способ приостановить ваш скрипт PowerShell и ждать команды для продолжения — это использовать метод Windows Pause. Это не команда PowerShell, а метод командной строки, который мы также можем использовать в PowerShell:

cmd /c 'pause'

На самом деле у этого метода нет преимуществ по сравнению с использованием функции Read-Host. Лично я предпочел бы использовать встроенную функцию PowerShell вместо этого. Проблема с командной функцией заключается в том, что она работает только на Windows.

Завершение

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

Надеюсь, что вы нашли эту статью полезной. Если у вас есть какие-либо вопросы, просто дайте мне знать!