Windows-Server-2003

阻止關機的 PowerShell 視窗

  • June 4, 2017

如果我有一個 PowerShell 視窗(在 PowerShell 命令提示符處)顯示,它會阻止電腦關閉。

即,如果我打開一個 PowerShell 視窗然後嘗試關閉伺服器,我會收到 End Program 彈出視窗,說 Windows 無法結束該程序。

如果我從開始菜單、cmd 提示符和指定了 -NoExit 的快捷方式啟動 PowerShell,我會得到相同的結果。

如何以與 CMD 視窗相同的方式關閉 PowerShell 視窗(如果它在 PowerShell 提示符下)?

或者,PowerShell 是否可以檢測到何時啟動關閉並因此自行關閉?

沿著 pk 建議的替代路線,我想出了這個測試程式碼:

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"

這似乎有效。

我公然從另一個站點剪切/粘貼此答案(因為不贊成連結並且我沒有更好的答案)。我相信這會解決你的問題。

…看起來您可以使用 Register-ObjectEvent 設置一個事件觀察器,使用[microsoft.win32.systemevents]並觀察SessionEndingor 或SessionEnded. 我沒有時間對此進行測試,但是您可以考慮使用以下方法:

$sysevent = [microsoft.win32.systemevents]
Register-ObjectEvent -InputObject $sysevent -EventName "SessionEnding" -Action {"Shutdown/Logoff detected.";Get-Process -Name Powershell | Stop-Process -Force}

可以在此處找到有關此類的更多資訊:http: //msdn.microsoft.com/en-us/library/microsoft.win32.systemevents_events.aspx

引用自:https://serverfault.com/questions/379830