Benutzer mit den meisten Antworten
Start-Sleep auf Formular

Frage
-
Guten Tag zusammen,
ich habe ein Formular mit Powershell V.1.0 erstellt. In diesem Formular werden diverse Funktionen ausgeführt welche ihr Ergebnis in einem LogFile speichern. Auf dem Formular befindet sich ausserdem ein Button, mit welchem ich ein weiteres Formular öffne, in dem das Logfile eingelesen und angezeigt wird.
Mein Problem ist allerdings, dass das 1. Formular (das mit den Funktionen) nach erfolgreicher Beendung der letzten Funktion nach 5 Sekunden automatisch geschlossen werden soll, wenn der Button nicht gedrückt wurde... Bisher habe ich die Start-Sleep Funktion verwendet. Bei dieser ist der Effekt leider, dass sobald diese Funktion gestartet wird, erkennt das Skript nicht mehr ob ich den Button gedrückt habe oder nicht.
Ich möchte dass dieses Problem mit der Powershell Version 1 gelöst werden kann, sofern dies irgendwie möglich ist.
Das Skript möchte ich wenn möglich nicht einfügen, da es ca 1000 Zeilen Code beinhaltet.
Vielen Dank für die Hilfe im Voraus
R00ney
Antworten
-
Hallo, nützliches für WindowsPowerShell\v1.01Example
Schließen ein Programm ordnungsgemäßAlias-Cmdlet findenExplorer Fenster Shell.Application COMMehr anzeigenWenn Sie Stop-Prozess, verwenden um ein Programm zu töten, wird es sofort beendet. Der Benutzer erhalten keine Chance um ungespeicherte Dokumente zu speichern:
Get-Process Editor | Stop-Prozess
Versuchen Sie eine mehr ordnungsgemäßes Weise mithilfe einer internen .NET-Methode, die dann fungiert als ob jemand das Programmfenster geschlossen. Wenn der Inhalt nicht gespeichert wurde, wird ein Dialogfeld wird geöffnet, und fordert eine Auswahl:
Get-Process Editor | Foreach-Object {$ _. CloseMainWindow() | Out-Null}
2Example
Hier ist Testlauf:
Benutzeroberflächenautomatisierung mit Windows PowerShell
Dr. James McCaffrey
http://msdn.microsoft.com/de-de/magazine/cc163301.aspxQuest unterstützt Microsoft Windows PowerShell
Grafische Benutzerschnittstellen, interaktive Community & Active Directory Anweisungen
http://www.questsoftware.de/powershell/
3Example Hilfe
Wenn PowerShell instaliert ist der Pfad Laufwerk Bsp.C:\Windows\System32\WindowsPowerShell\v1.0\Documents\de-DE
da ist eine Datei ---UserGuide.rtf--Hilfe und noch andere DateienBeenden von Prozessen („Stop-Process“)
Windows PowerShell stellt mehrere Möglichkeiten zum Auflisten von Prozessen bereit. Wie aber kann ein Prozess beendet werden?
Das Cmdlet Stop-Process nimmt einen Namen oder eine ID für den Prozess an, der beendet werden soll. Die Möglichkeit zum Beenden von Prozessen ist an Berechtigungen gebunden. Einige Prozesse können nicht beendet werden. Wenn Sie beispielsweise den Leerlaufprozess beenden möchten, wird folgende Fehlermeldung erzeugt:
PS> Stop-Process -Name Idle
Stop-Process : Der Prozess "Idle (0)" kann aufgrund des folgenden Fehlers nicht be
endet werden: Zugriff verweigert
Bei Zeile:1 Zeichen:13
+ Stop-Process <<<< -Name IdleSie können die Aufforderung auch mit dem Confirm-Parameter erzwingen. Dieser Parameter ist besonders hilfreich, wenn Sie beim Angeben des Prozessnamens Platzhalter verwenden, da möglicherweise auch Prozesse gefunden werden, die nicht beendet werden sollen:
PS> Stop-Process -Name t*,e* -Confirm
Bestätigung
Möchten Sie diese Aktion wirklich ausführen?
Ausführen des Vorgangs "Stop-Process" für das Ziel "explorer (408)".
[J] Ja [A] Ja, alle [N] Nein [K] Nein, keine [H] Anhalten [?] Hilfe
(Der Standardwert ist "J"):n
Bestätigung
Möchten Sie diese Aktion wirklich ausführen?
Ausführen des Vorgangs "Stop-Process" für das Ziel "taskmgr (4072)".
[J] Ja [A] Ja, alle [N] Nein [K] Nein, keine [H] Anhalten [?] Hilfe
(Der Standardwert ist "J"):nUmfangreichere Prozessbearbeitungen sind mit einigen Objektfilterungs-Cmdlets möglich. Prozessobjekte verfügen über eine Responsive-Eigenschaft. Wenn der Prozess nicht mehr antwortet, weist diese den Wert True auf, sodass alle Anwendungen, die nicht mehr reagieren, mit folgendem Befehl beendet werden können:
Get-Process | Where-Object -FilterScript {$_.Responding -eq $false} | Stop-ProcessSie können diesen Ansatz auch in anderen Situationen verwenden. Angenommen eine sekundäre Taskleistenanwendung wird automatisch ausgeführt, wenn eine andere Anwendung gestartet wird. Möglicherweise stellen Sie fest, dass dies in Terminaldienste-Sitzungen nicht ordnungsgemäß funktioniert, möchten diese Funktion jedoch für Sitzungen beibehalten, die auf der physischen Computerkonsole ausgeführt werden. Sitzungen, die mit dem Desktop des physischen Computers verbunden sind, weisen stets die Sitzungs-ID 0 auf, sodass alle Instanzen von Prozessen in anderen Sitzungen mit Where-Object und der SessionID beendet werden können:
Get-Process -Name BadApp | Where-Object -FilterScript {$_.SessionId -neq 0} | Stop-ProcessBeenden aller anderen Windows PowerShell-Sitzungen
Mitunter kann es hilfreich sein, alle Windows PowerShell-Sitzungen außer der aktuellen Sitzung beenden zu können. Wenn für eine Sitzung zu viele Ressourcen erforderlich sind oder der Zugriff darauf nicht möglich ist (z. B. bei Remoteausführung oder Ausführung in einer anderen Desktopsitzung), kann eine Sitzung möglicherweise nicht unmittelbar beendet werden. Wenn Sie nun versuchen, alle zu diesem Zeitpunkt ausgeführten Sitzungen zu beenden, wird möglicherweise stattdessen die aktuelle Sitzung beendet.
Alle Windows PowerShell-Sitzungen verfügen über die Umgebungsvariable PID, die die ID des Windows PowerShell-Prozesses enthält. Sie können die $PID mit der ID der einzelnen Sitzungen vergleichen und nur Windows PowerShell-Sitzungen beenden, die eine abweichende ID aufweisen. Hierfür verwenden Sie den folgenden Pipelinebefehl, der außerdem (anhand des PassThru-Parameters) eine Liste der beendeten Sitzungen zurückgibt:
PS> Get-Process -Name powershell | Where-Object -FilterScript {$_.Id -ne $PID} | Stop-Process -
PassThru
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
334 9 23348 29136 143 1.03 388 powershell
304 9 23152 29040 143 1.03 632 powershell
302 9 20916 26804 143 1.03 1116 powershell
335 9 25656 31412 143 1.09 3452 powershell
303 9 23156 29044 143 1.05 3608 powershell
287 9 21044 26928 143 1.02 3672 powershell
Beenden, Starten, Anhalten und Neustarten von Diensten
Alle Dienst-Cmdlets verfügen über die gleiche Grundform. Dienste können mit dem allgemeinen Namen oder dem Anzeigenamen angegeben werden und nehmen Listen und Platzhalter als Werte an. Geben Sie Folgendes ein, um den Druckerspooler zu beenden:
Stop-Service -Name spoolerGeben Sie Folgendes ein, um den beendeten Druckerspooler neu zu starten:
Start-Service -Name spoolerGeben Sie Folgendes ein, um den Druckerspooler anzuhalten:
Suspend-Service -Name spoolerDas Cmdlet Restart-Service funktioniert auf die gleiche Weise wie andere Dienst-Cmdlets. Im Folgenden finden Sie einige komplexere Verwendungsbeispiele. Die einfachste Verwendung besteht in der Angabe des Dienstnamens:
PS> Restart-Service -Name spooler
WARNUNG: Warten auf Start des Dienstes "Print Spooler (Spooler)"...
WARNUNG: Warten auf Start des Dienstes "Print Spooler (Spooler)"...
PS>Daraufhin erhalten Sie wiederholt Warnmeldungen über das Starten des Druckerspoolers. Wenn Sie einen Dienstvorgang ausführen, der einige Zeit in Anspruch nimmt, werden Sie von Windows PowerShell benachrichtigt, dass die Ausführung des Vorgangs weiterhin versucht wird.
Wenn Sie mehrere Dienste neu starten möchten, können Sie eine Liste der Dienste anzeigen, filtern und anschließend den Neustart durchführen:
PS> Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service
WARNUNG: Warten auf Beendigung des Dienst "Computer Browser (Browser)"...
WARNUNG: Warten auf Beendigung des Dienst "Computer Browser (Browser)"...
Restart-Service : Der Dienst "Logical Disk Manager (dmserver)" kann nicht beendet
werden, da andere Dienste von diesem abhängig sind. Er kann nur beendet werden, we
nn das Force-Kennzeichen festgelegt wird.
Bei Zeile:1 Zeichen:57
+ Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service <<<<
WARNUNG: Warten auf Start des Dienstes "Print Spooler (Spooler)"...
WARNUNG: Warten auf Start des Dienstes "Print Spooler (Spooler)"...habe etwas von der UserGuide.rtf rausgeschnitten, könnte helfen?
mfg,entwickler
Entwickler Microsoft Partner- Als Antwort markiert R00ney1988 Dienstag, 15. Juni 2010 07:24