2010-04-27 8 views
12

Ich habe einen Browser von einem Powershell-Skript zu stoppen, was ich tun, indem sie inGibt es eine sanfte Methode, Prozesse mit Windows PowerShell anzuhalten?

Stop-Process -Force 

jedoch Rohrleitungen, das ist sehr abrupt. Wenn der Browser neu gestartet wird, erkennt es, dass es nicht ordnungsgemäß heruntergefahren wurde, und versucht, die vorherige Sitzung neu zu starten. Kann ich es irgendwie sagen, dass es sich anmutig schließt? („Es gibt zwei Möglichkeiten, wie wir dies tun können ...“)

Antwort

10

Versuchen Sie das Benutzer Schließen der App zu simulieren:

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

Keith Hill wurde bereits vorgeschlagen Closemainwindow() zu verwenden. Aber es ist nur eine Einladung zum Schließen, einige Benutzerinteraktionen werden möglicherweise noch benötigt, zum Beispiel kann eine Anwendung einige Dialoge anzeigen, um etwas zu speichern und so weiter. Wenn ein aufrufendes Skript wirklich erwartet, dass ein Prozess beendet wird, verwende ich dieses Muster:

# 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

Schöner Bau! Vielen Dank. –

2

Sie können dies auch tun:

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

Dadurch werden alle Prozesse schließen, die dem Muster entsprechen, und haben ein Fenster mit ihnen verbunden. Beispielsweise kann der Chrome-Prozess Unterprozesse verwenden, die kein Fenster haben. Diese Unterprozesse werden ignoriert.

+0

FYI - dieser Befehl funktioniert so lange wie es tatsächlich einen Prozess mit dem gegebenen Namen gibt, sonst wird es fehlgeschlagen. Je nach Anwendungsfall ist der Fehler möglicherweise oder nicht erwünscht. – HairOfTheDog

Verwandte Themen