如果我显示一个 PowerShell 窗口(在 PowerShell 命令提示符下),它会阻止计算机关闭。
即,如果我打开 PowerShell 窗口,然后尝试关闭服务器,我会收到“结束程序”弹出窗口,提示 Windows 无法结束该程序。
如果我从开始菜单、从 cmd 提示符以及从指定 -NoExit 的快捷方式启动 PowerShell,我会得到相同的结果。
如何让关机自动关闭 PowerShell 窗口(如果它在 PowerShell 提示符下),就像关闭 CMD 窗口一样?
或者,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"
这似乎有效。
答案1
我明显是从另一个人那里剪切/粘贴这个答案的地点(因为链接是不受欢迎的,而且我没有更好的答案。)我相信这会解决你的问题。
...看起来你可以使用 Register-ObjectEvent 设置事件观察器,使用
[microsoft.win32.systemevents]
并观察SessionEnding
或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