2010-04-27 6 views

risposta

10

Provate a simulare l'utente chiude l'applicazione:

(Get-Process -Id 10024).CloseMainWindow() 
9

Keith Hill ha già proposto di utilizzare CloseMainWindow(). Ma è solo un invito a chiudere, alcune interazioni dell'utente potrebbero essere ancora necessarie, ad esempio un'applicazione potrebbe mostrare alcune finestre di dialogo per salvare qualcosa e così via. Se uno script chiamante si aspetta davvero che un processo venga chiuso, io uso questo schema:

# close the window and wait for exit 
$_ = Get-Process -Id 12345 
[void]$_.CloseMainWindow() 
if (!$_.HasExited) { 
    Write-Host "Waiting for exit of Pid=$($_.Id)..." 
    $_.WaitForExit() 
} 
+0

Bella build! Grazie. –

2

si può anche fare questo:

Get-Process <name> | where {$_.MainWindowHandle -ne [System.IntPtr]::Zero} | foreach {$_.CloseMainWindow()} 

questo chiude tutti i processi che corrispondono al modello e hanno una finestra ad essi connessi. Ad esempio, il processo di Chrome potrebbe utilizzare sottoprocessi che non hanno una finestra. Questi sottoprocessi saranno ignorati.

+0

FYI - questo comando funziona fino a quando esiste effettivamente un processo con il nome specificato, altrimenti viene eliminato. L'errore può o non può essere desiderato a seconda del tuo caso d'uso. – HairOfTheDog

Problemi correlati