none
Automatischer Neustart eines Background Jobs RRS feed

  • Frage

  • Guten Tag!

    Ich habe einen Background Job der folgendermassen aussieht:

    $targets = "firefox","outlook"

    foreach ($target in $targets)
    {
        Start-Job -name $target -ArgumentList $target {
            param($target)
            while ((Get-Process $target).Responding) {sleep -Milliseconds 50}
            if (!(Get-Process $target).Responding)
            {
                # Do Stuff
            }
        } | out-null
    }

    Wie starte ich den Job neu sobald er "completed" ist?

    Mit "Wait-Job | Receive-Job | Resume-Job" scheint es nicht zu funktionieren.

    Danke für eure Hilfe


    Dienstag, 23. Februar 2016 09:55

Antworten

  • Hallo Simon,

    wenn einen Job completed ist kann man den nicht neu starten. Sie müssen neuen Job ausführen.

    • Get-Job 
      Gets Windows PowerShell background jobs that are running in the current session
    • Receive-Job
      Gets the results of the Windows PowerShell background jobs in the current session
    • Remove-Job 
      Deletes a Windows PowerShell background job
    • Resume-Job 
      Restarts a suspended job
    • Start-Job 
      Starts a Windows PowerShell background job
    • Stop-Job 
      Stops a Windows PowerShell background job
    • Suspend-Job
      Temporarily stops workflow jobs
    • Wait-Job 
      Suppresses the command prompt until one or all of the Windows PowerShell background jobs that are running in the session are complete

    Das was Sie erreichen wollen wird mit workflow besser klappen, glaube ich.

    Gruß,

    Teodora


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Mittwoch, 24. Februar 2016 06:10
    Moderator
  • Du kannst einen Job nicht neu starten wenn er erledigt ist.  Du kannst aber jederzeit einen inhaltlich gleichen Job neu einstellen.

    Um deine andere Frage zu beantworten, du kannst keine goto-Sprungmarken definieren wie in der Batch. Dafür nimmst du bei Powershell Funktionen. Die kannst du jederzeit immer wieder "anspringen" so oft du möchtest.
    Oder du packst das zu wiederholende in eine while- oder do/until- Schleife.

    Workflows sind ne coole Sache, aber nicht um sie mal eben zu benutzen. Man muß sich etwas in die Besonderheiten einarbeiten. Wie du schon selbst gemerkt hast, funktioniert bei Worklflows nämlich manches anders und du hast einen eingeschränkten Befehlssatz zur Verfügung.

     
    Gruß, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v4: Link ! Neue Version !
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.


    Freitag, 26. Februar 2016 20:39
    Moderator

Alle Antworten

  • Hallo Simon,

    wenn einen Job completed ist kann man den nicht neu starten. Sie müssen neuen Job ausführen.

    • Get-Job 
      Gets Windows PowerShell background jobs that are running in the current session
    • Receive-Job
      Gets the results of the Windows PowerShell background jobs in the current session
    • Remove-Job 
      Deletes a Windows PowerShell background job
    • Resume-Job 
      Restarts a suspended job
    • Start-Job 
      Starts a Windows PowerShell background job
    • Stop-Job 
      Stops a Windows PowerShell background job
    • Suspend-Job
      Temporarily stops workflow jobs
    • Wait-Job 
      Suppresses the command prompt until one or all of the Windows PowerShell background jobs that are running in the session are complete

    Das was Sie erreichen wollen wird mit workflow besser klappen, glaube ich.

    Gruß,

    Teodora


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Mittwoch, 24. Februar 2016 06:10
    Moderator
  • Hallo Teodora

    Danke für deine Antwort

    Ich muss das mit einem Background Job machen, da ich ein GUI anzeigen will, welches visualisiert das Prozesse überwacht werden. Wenn das GUI und der Job im gleichen Thread laufen, dann antwortet die Windows-Form nicht bzw. wird unresponsive.

    Oder verhält sich ein Workflow gleich wie ein Background Job? Ausserdem kann ich in einem Workflow keinen While loop machen sagt mir der Powershell ISE

    Edit:

    Gibt es evtl. eine möglichkeit wie bei batch, im Skript umherzuspringen? sowas wie das hier:

    targets = "firefox","outlook"

    foreach ($target in $targets)
    {
        Start-Job -name $target -ArgumentList $target {
            param($target)
            :job-loop
            while ((Get-Process $target).Responding) {sleep -Milliseconds 50}
            if (!(Get-Process $target).Responding)
            {
                # Do Stuff
            } goto :job-loop
        } | out-null
    }





    Mittwoch, 24. Februar 2016 07:48
  • Hallo Simon,

    schauen Sie mal hier:

    PowerShell Jobs Week: Jobs and Workflows

    PowerShell Workflows: Restarting the Computer

    Gruß,

    Teodora


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Donnerstag, 25. Februar 2016 13:23
    Moderator
  • Du kannst einen Job nicht neu starten wenn er erledigt ist.  Du kannst aber jederzeit einen inhaltlich gleichen Job neu einstellen.

    Um deine andere Frage zu beantworten, du kannst keine goto-Sprungmarken definieren wie in der Batch. Dafür nimmst du bei Powershell Funktionen. Die kannst du jederzeit immer wieder "anspringen" so oft du möchtest.
    Oder du packst das zu wiederholende in eine while- oder do/until- Schleife.

    Workflows sind ne coole Sache, aber nicht um sie mal eben zu benutzen. Man muß sich etwas in die Besonderheiten einarbeiten. Wie du schon selbst gemerkt hast, funktioniert bei Worklflows nämlich manches anders und du hast einen eingeschränkten Befehlssatz zur Verfügung.

     
    Gruß, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v4: Link ! Neue Version !
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.


    Freitag, 26. Februar 2016 20:39
    Moderator