none
Start-Sleep auf Formular RRS feed

  • 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
    Donnerstag, 4. Februar 2010 13:02

Antworten


  • Hallo, nützliches für WindowsPowerShell\v1.0

    1Example
    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.aspx

    Quest 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 Dateien

    Beenden 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 Idle 

    Sie 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"):n 

    Umfangreichere 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-Process 

    Sie 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-Process 

    Beenden 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 spooler 

    Geben Sie Folgendes ein, um den beendeten Druckerspooler neu zu starten:
     
    Start-Service -Name spooler 

    Geben Sie Folgendes ein, um den Druckerspooler anzuhalten:
     
    Suspend-Service -Name spooler 

    Das 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
    Sonntag, 21. März 2010 19:00