Janela do PowerShell impedindo o desligamento

1

Se eu tiver uma janela do PowerShell (no prompt de comando do PowerShell) na exibição, isso impedirá que o computador seja desligado.

Ou seja. se eu abrir uma janela do PowerShell e tentar desligar o servidor, recebo o pop-up End Program dizendo que o Windows não pode encerrar este programa.

Eu obtenho o mesmo resultado se eu iniciar o PowerShell no menu Iniciar, a partir de um prompt cmd e de um atalho com -NoExit especificado.

Como posso obter o desligamento para fechar automaticamente uma janela do PowerShell (se estiver no prompt do PowerShell) da mesma maneira que faria para uma janela do CMD?

Como alternativa, é possível que o PowerShell detecte quando um desligamento foi iniciado e, portanto, se feche?

Descendo a rota alternativa como sugerido por pk, eu criei este código de teste:

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"

O que parece funcionar.

    
por FrinkTheBrave 16.04.2012 / 13:26

1 resposta

1

Estou claramente cortando / colando essa resposta de outra site (desde que a ligação é desaprovada e eu não tenho uma resposta melhor). Eu acredito que isso resolverá seu problema.

...it looks like you can set up a Event watcher using Register-ObjectEvent using [microsoft.win32.systemevents] and watching for either SessionEnding or SessionEnded. I haven't had time to test this out, but you could look at using something like this:

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

More information about this class can be found here: http://msdn.microsoft.com/en-us/library/microsoft.win32.systemevents_events.aspx

    
por 16.04.2012 / 16:02