Powershell: Eltern töten, kein Kind?
Ich beginne mit einem Klick auf ein Symbol, um eine CMD-Batchdatei auszuführen. (schwarzes CMD-Fenster) Das öffnet ein Powershell-Skript. Dies wiederum startet ein zweites Skript, das eine GUI öffnet. Der Benutzer trifft eine Auswahl in der GUI und ein Browserfenster wird geöffnet.
Sobald der Browser geöffnet wird, bleibt das CMD jedoch geöffnet (möglicherweise können Sie dies "beenden", indem Sie das CMD / k in der Batch-Datei entfernen, um die Fehlerprüfung zu aktivieren). Aber kann ich die GUI nach dem Öffnen des Browsers "beenden"?
Ich verwende derzeit "Start-Process", um die GUI zu öffnen, und dann einen weiteren "Start-Process" im zweiten Skript, um den Browser zu öffnen. Da ich glaube, dass es sich um einen einzelnen Thread handelt, muss jeder Prozess warten, bis sein untergeordnetes Element abgeschlossen ist, bevor er sich selbst schließen kann. Idealerweise möchte ich, dass CMD / Powershell nach dem Öffnen des Browsers beendet wird.
** Ich habe bisher keinen Code gepostet, der über 300 Zeilen umfasst.
+++++ Mein Dank geht an "HarryMC" für ein paar Hinweise. Ich habe seinen "Start" -Vorschlag zur Batch-Datei hinzugefügt, die dann das CMD-Fenster schloss ... aber stattdessen ein Powershell-Fenster + GUI öffnete. Schließlich wurde festgestellt, dass Sie das PS-Fenster ausblenden können, sodass die vollständige Zeile wie folgt lautete:
Start PowerShell -WindowStyle Hidden -NoProfile -ExecutionPolicy Bypass -Command "& '%PowerShellScriptPath%'"
Es bedeutet, dass zwei Fenster auf dem Bildschirm blinken, bevor die GUI geladen wird, aber ich komme dorthin. Natürlich bedeutet das Ausblenden des Fensters nicht, dass der Prozess beendet wurde - nächste Recherche -, sondern sieht (bisher) für den Endbenutzer "ordentlicher" aus.
Antworten
Sie öffnen Ihre Programme so, dass jedes Kind das Kind seines Elternteils ist. Um das übergeordnete Element beenden zu können, müssen Sie jedes Programm als unabhängigen Prozess starten.
Bei CMD lautet der Befehl start .
Verwenden Sie für PowerShell den Anrufoperator & .
Jedes Programm sollte das nächste aufrufen und sich dann selbst beenden, was einfacher ist, als es zu beenden. CMD und PowerShell werden automatisch beendet, wenn sie aufgerufen werden, um einen einzelnen Befehl ( cmd /c commandund powershell "command") auszuführen .