2012-04-16 1 views
2

Если у меня есть окно PowerShell (в командной строке PowerShell), оно запрещает выключение компьютера.Окно PowerShell, предотвращающее выключение

I.e. если я открою окно PowerShell, а затем попытаюсь выключить сервер, я получаю всплывающее окно программы End, говорящее, что Windows не может завершить эту программу.

Получается тот же результат, если я запустил PowerShell из меню «Пуск», из командной строки и из ярлыка с указанным значением -NoExit.

Как я могу получить shutdown, чтобы автоматически закрыть окно PowerShell (если оно есть в подсказке PowerShell) так же, как и для окна CMD?

В качестве альтернативы, возможно ли, чтобы PowerShell обнаружил, когда выключение было начато и, следовательно, закрыто?

ответ

2

Этот вопрос был на Server Fault, так вот мое решение код теста:

Write-Host "PowerShellBlockingShutdown.ps1 Started" 

$global:shuttingDown = $false 
$sysevent = [microsoft.win32.systemevents] 
Register-ObjectEvent -InputObject $sysevent -EventName "SessionEnding" -Action {$global:shuttingDown = $true; Write-Host " SessionEnding"} 
Register-ObjectEvent -InputObject $sysevent -EventName "SessionEnded" -Action {$global:shuttingDown = $true; Write-Host " SessionEnded"} 

do { 
    Start-Sleep -Seconds 3 
    if ($global:shuttingDown) {break} 
    Write-Host " Waiting for Shutdown" 
} while ($true) 

Write-Host "PowerShellBlockingShutdown.ps1 Finished" 

Который, кажется, работает.