Я пишу сценарий powershell для включения некоторых функций Windows. Это выглядит примерно так:
...
Enable-WindowsOptionalFeature -Online -FeatureName "IIS-WebServerRole"
Enable-WindowsOptionalFeature -Online -FeatureName "IIS-WebServer"
Enable-WindowsOptionalFeature -Online -FeatureName "IIS-FTPServer"
...
В этом сценарии есть несколько команд, в которых я включаю функции Windows, требующие перезагрузки. Итак, что я заметил, так это то, что в powershell он включает вещи, а затем последние 4 строки, где я разрешаю вещи, требующие перезагрузки, постоянно предлагают мне перезагрузить компьютер в powershell. Поэтому я должен постоянно говорить «Нет», потому что иначе он перезагрузит компьютер до того, как все команды в сценарии будут выполнены:
У меня вопрос, в моем скрипте, как мне дождаться выполнения всех команд, и только потом появится подсказка о перезагрузке моего ПК? Я пытался добавить теги «Wait-Process» и «-Wait» к командам, но получил такие ошибки:

Кто-нибудь знает, как я могу дождаться выполнения всех команд и только потом получить приглашение на перезагрузку? Заранее спасибо!





Enable-WindowsOptionalFeature имеет переключатель -NoRestart. Описанный как:
Suppresses reboot. If a reboot is not required, this command does nothing. This option will keep the application from prompting for a restart or keep it from restarting automatically.
Чтобы построить на ответ @zdan, используйте флаг -NoRestart. Вы можете либо опустить -NoRestart до последней функции, либо сделать запрос самостоятельно, что оставляет вас открытым для альтернативных логических шаблонов для установки списка желаемых функций:
'IIS-WebServerRole', 'IIS-WebServer', 'IIS-FTPServer' | ForEach-Object {
Enable-WindowsOptionalFeature -Online -FeatureName $_ -NoRestart
}
if ( ( Read-Host -Prompt "Would you like to reboot to complete feature installation? (y/n)" ) -match '^y' ) {
Restart-Computer -Force
}
Или, если вы хотите, чтобы это было просто и вам не нужен настраиваемый текст приглашения перед запросом на перезагрузку, просто используйте переключатель -Confirm с Restart-Computer, чтобы получить приглашение на перезагрузку:
'IIS-WebServerRole', 'IIS-WebServer', 'IIS-FTPServer' | ForEach-Object {
Enable-WindowsOptionalFeature -Online -FeatureName $_ -NoRestart
}
Restart-Computer -Confirm -Force