如果我有一个PowerShell窗口(在PowerShell命令提示符下)显示,它可以防止计算机closures。
也就是说,如果我打开PowerShell窗口,然后尝试closures服务器,我得到了结束程序popup窗口说Windows不能结束这个程序。
如果从启动菜单,cmd提示符以及指定-NoExit的快捷方式启动PowerShell,我会得到相同的结果。
我怎样才能得到closures自动closuresPowerShell窗口(如果它在PowerShell提示符)与CMD窗口相同的方式?
另外,PowerShell是否有可能检测到closures已经启动,因此closures?
按照pk提出的替代路线,我提出了这个testing代码:
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"
这似乎工作。
我从另一个网站公然地剪切/粘贴这个答案(因为链接被压低,我没有更好的答案)。 我相信这会解决你的问题。
…看起来您可以使用
[microsoft.win32.systemevents]使用Register-ObjectEvent设置Event Watcher并观察SessionEnding或SessionEnded。 我没有时间来testing这个,但你可以看看使用这样的东西:
$sysevent = [microsoft.win32.systemevents] Register-ObjectEvent -InputObject $sysevent -EventName "SessionEnding" -Action {"Shutdown/Logoff detected.";Get-Process -Name Powershell | Stop-Process -Force}
有关此类的更多信息可以在这里find: http : //msdn.microsoft.com/en-us/library/microsoft.win32.systemevents_events.aspx