none
Receive-Job ohne Daten RRS feed

  • Frage

  • Hallo zusammen,

     

    ich habe auf 2 Rechnern (XP 32-bit SP3 und Server 2003 R2 x64 SP2) Powershell 2.0 installiert und folgende Befehle abgesetzt:

     

    Start-Job -ScriptBlock {dir}
    
    Get-Job
    
    Get-Job | Receive-Job

    Laut Get-Job enthält der Job auf dem XP-Rechner Daten, auf dem Server jedoch nicht. Dementsprechend liefert Receive-Job auch nur auf dem XP-Rechner ein Ergebnis.

    Kann mir jemand einen Tipp geben, was ich auf dem Server "falsch" mache?

     

    Danke im voraus

    Lutz Ritter

    Donnerstag, 14. Juli 2011 07:45

Antworten

  • Ich hab am Wochenende mal meine alte 2003er VM für dich rausgekramt und mal ein paar Tests gemacht. Ich konnte den Fehler reproduzieren.

    Offensichtlich ist es so, das unter 2003 (im Gegensatz zu 2008 oder W7) das CMDlet get-childitem, wenn es in einem Job gestartet wird, zwingend einen Pfad benötigt, sonst ist das Ergebnis leer. Gib also mal hinter get-childitem einen Pfad an, also z.b.

    Start-Job -ScriptBlock { get-childitem "C:\" } -name test

    Grüße, Denniver

     


    http://bytecookie.wordpress.com/
    Montag, 18. Juli 2011 13:13
    Moderator

Alle Antworten

  • Mhm wenn du nach start-job keine Fehlermeldung erhältst, also Jobs grundsätzlich laufen, sollte das eigentlich gehen. Vielleicht bist du einfach zu schnell, bzw. der Server zu langsam. Test doch mal dies bitte (am besten in Powershell ISE) und poste den kompletten Output:

    Start-Job -ScriptBlock {write-host "Dies sind die Daten aus dem Background Job"} -name test
    start-sleep 2
    Receive-Job test
    


    Allerdings ist das nicht das erste mal, das ich von seltsamen Effekten im Zusammenhang mit Hintergrundjobs und Server 2003 R2 lese. Vielleicht haben wir hier auch einen Bug.

    Grüße, Denniver

     


    http://bytecookie.wordpress.com/


    Donnerstag, 14. Juli 2011 13:42
    Moderator
  • Hallo Denniver,

     

    ich habe Deinen Code mal im ISE laufen lassen:

    PS C:\Documents and Settings\admine> get-job | remove-job
    Start-Job -ScriptBlock {write-host "Dies sind die Daten aus dem Background Job"} -name test
    start-sleep 2
    Receive-Job test
    
    
    Id       Name      State   HasMoreData   Location       Command         
    --       ----      -----   -----------   --------       -------         
    9        test      Running  True      localhost      write-host "Dies sind ...
    Dies sind die Daten aus dem Background Job
    


    Hier hat auch alles geklappt.

    Allerdings war Start-Sleep trotzdem nicht die Lösung:

    PS C:\Documents and Settings\admine> get-job | remove-job
    Start-Job -ScriptBlock { dir } -name test
    start-sleep 2
    write-host "Hier kommen die Daten aus dem Background:"
    Receive-Job test
    write-host "Oder auch nicht."
    
    
    Id       Name      State   HasMoreData   Location       Command         
    --       ----      -----   -----------   --------       -------         
    11       test      Running  True      localhost       dir           
    Hier kommen die Daten aus dem Background:
    Oder auch nicht.
    


    Trotzdem Danke

    Lutz

    Donnerstag, 14. Juli 2011 14:29
  • Wenn du mit "get-job test" den Jobstatus abrufst, wird dieser jemals "completed" oder bleibt er auf "running"?


    http://bytecookie.wordpress.com/
    Donnerstag, 14. Juli 2011 15:15
    Moderator
  • Der Status wechselt quasi sofort auf Completed und HasMoreData steht auf False

    PS C:\Documents and Settings\admine> get-job | remove-job
    Start-Job -ScriptBlock { get-childitem } -name test
    start-sleep 2
    write-host "Get-Job-Ergebnis:"
    get-job
    write-host "Hier kommen die Daten aus dem Background:"
    Receive-Job test
    write-host "Oder auch nicht."
    
    
    Id       Name      State   HasMoreData   Location       Command         
    --       ----      -----   -----------   --------       -------         
    19       test      Running  True      localhost       get-childitem      
    Get-Job-Ergebnis:
    19       test      Completed False      localhost       get-childitem      
    Hier kommen die Daten aus dem Background:
    Oder auch nicht.
    


    Freitag, 15. Juli 2011 07:38
  • Ich hab am Wochenende mal meine alte 2003er VM für dich rausgekramt und mal ein paar Tests gemacht. Ich konnte den Fehler reproduzieren.

    Offensichtlich ist es so, das unter 2003 (im Gegensatz zu 2008 oder W7) das CMDlet get-childitem, wenn es in einem Job gestartet wird, zwingend einen Pfad benötigt, sonst ist das Ergebnis leer. Gib also mal hinter get-childitem einen Pfad an, also z.b.

    Start-Job -ScriptBlock { get-childitem "C:\" } -name test

    Grüße, Denniver

     


    http://bytecookie.wordpress.com/
    Montag, 18. Juli 2011 13:13
    Moderator
  • Hallo Denniver,

     

    vielen Dank für die Mühe.

    Bei mir funktioniert der Job jetzt auch wie erwartet.

     

    Vielen Dank

    Lutz

    Dienstag, 19. Juli 2011 08:07