about_Job_Details

Krótki opis

Zawiera szczegółowe informacje o zadaniach w tle na komputerach lokalnych i zdalnych.

Szczegółowy opis

W tym temacie opisano koncepcję zadania w tle i przedstawiono informacje techniczne dotyczące sposobu działania zadań w tle w programie PowerShell.

Ten temat jest uzupełnieniem tematów about_Jobs, about_Thread_Jobs i about_Remote_Jobs .

Informacje o zadaniach w tle

Zadanie w tle uruchamia polecenie lub wyrażenie asynchronicznie. Może on uruchamiać polecenie cmdlet, funkcję, skrypt lub inne zadanie oparte na poleceniach. Jest przeznaczony do uruchamiania poleceń, które zajmują dłuższy czas, ale można go użyć do uruchamiania dowolnego polecenia w tle.

Po uruchomieniu synchronicznego polecenia wiersz polecenia programu PowerShell jest pomijany do momentu ukończenia polecenia. Jednak zadanie w tle nie pomija monitu programu PowerShell. Polecenie uruchamiania zadania w tle zwraca obiekt zadania. Monit jest zwracany natychmiast, aby można było pracować nad innymi zadaniami podczas uruchamiania zadania w tle.

Jednak po uruchomieniu zadania w tle wyniki nie są natychmiast uzyskiwane, nawet jeśli zadanie jest uruchamiane bardzo szybko. Zwrócony obiekt zadania zawiera przydatne informacje o zadaniu, ale nie zawiera wyników zadania. Aby uzyskać wyniki zadania, należy uruchomić oddzielne polecenie. Można również uruchamiać polecenia, aby zatrzymać zadanie, poczekać na ukończenie zadania i usunąć zadanie.

Aby czas zadania w tle był niezależny od innych poleceń, każde zadanie w tle jest uruchamiane we własnej sesji programu PowerShell. Może to być jednak tymczasowe połączenie, które jest tworzone tylko do uruchamiania zadania, a następnie jest niszczone lub może to być trwałe psSession , którego można użyć do uruchamiania kilku powiązanych zadań lub poleceń.

Używanie poleceń cmdlet zadania

Użyj polecenia , Start-Job aby uruchomić zadanie w tle na komputerze lokalnym. Start-Job zwraca obiekt zadania. Obiekty reprezentujące zadania uruchomione na komputerze lokalnym można również uzyskać przy użyciu Get-Job polecenia cmdlet .

Aby uzyskać wyniki zadania, użyj Receive-Job polecenia . Jeśli zadanie nie zostało ukończone, Receive-Job zwraca wyniki częściowe. Możesz również użyć Wait-Job polecenia cmdlet, aby pominąć wiersz polecenia do momentu ukończenia jednego lub wszystkich zadań, które zostały uruchomione w sesji.

Aby zatrzymać zadanie w tle, użyj Stop-Job polecenia cmdlet . Aby usunąć zadanie, użyj Remove-Job polecenia cmdlet .

Aby uzyskać więcej informacji na temat działania poleceń cmdlet, zobacz temat Pomoc dla każdego polecenia cmdlet i zobacz about_Jobs.

Uruchamianie zadań w tle na komputerach zdalnych

Zadania w tle można tworzyć i zarządzać nimi na komputerze lokalnym lub zdalnym. Aby zdalnie uruchomić zadanie w tle, użyj parametru AsJob polecenia cmdlet, takiego jak Invoke-Command, lub użyj Invoke-Command polecenia cmdlet, aby zdalnie uruchomić Start-Job polecenie. Możesz również uruchomić zadanie w tle w sesji interakcyjnej.

Aby uzyskać więcej informacji na temat zdalnych zadań w tle, zobacz about_Remote_Jobs.

Zadania podrzędne

Każde zadanie w tle składa się z zadania nadrzędnego i co najmniej jednego zadania podrzędnego. W zadaniach, które zaczęły używać Start-Job parametru asJob polecenia Invoke-Command, zadanie nadrzędne jest kierownictwem. Nie uruchamia żadnych poleceń ani nie zwraca żadnych wyników. Polecenia są w rzeczywistości uruchamiane przez zadania podrzędne. Zadania rozpoczęte przy użyciu innych poleceń cmdlet mogą działać inaczej.

Zadania podrzędne są przechowywane we właściwości ChildJobs obiektu zadania nadrzędnego. Właściwość ChildJobs może zawierać jeden lub wiele obiektów podrzędnych zadań. Obiekty zadania podrzędnego mają identyfikator i identyfikatorwystąpienia , które różnią się od zadania nadrzędnego, aby można było zarządzać zadaniami nadrzędnymi i podrzędnymi pojedynczo lub jako jednostka.

Aby uzyskać zadania nadrzędne i podrzędne zadania zadania, użyj parametru Get-JobIncludeChildJobs polecenia cmdlet. Parametr IncludeChildJob został wprowadzony w Windows PowerShell 3.0.

PS> Get-Job -IncludeChildJob

Id Name   PSJobTypeName State      HasMoreData   Location    Command
-- ----   ------------- -----      -----------   --------    -------
1  Job1   RemoteJob     Failed     True          localhost   Get-Process
2  Job2                 Completed  True          Server01    Get-Process
3  Job3                 Failed     False         localhost   Get-Process

Aby uzyskać zadanie nadrzędne i tylko zadania podrzędne z określoną wartością Stanu, użyj parametru Get-JobChildJobState polecenia cmdlet. Parametr ChildJobState został wprowadzony w Windows PowerShell 3.0.

PS> Get-Job -ChildJobState Failed

Id Name   PSJobTypeName State      HasMoreData   Location    Command
-- ----   ------------- -----      -----------   --------    -------
1  Job1   RemoteJob     Failed     True          localhost   Get-Process
3  Job3                 Failed     False         localhost   Get-Process

Aby uzyskać podrzędne zadania zadania zadania we wszystkich wersjach programu PowerShell, użyj właściwości ChildJob zadania nadrzędnego.

PS> (Get-Job Job1).ChildJobs

Id Name   PSJobTypeName State      HasMoreData   Location    Command
-- ----   ------------- -----      -----------   --------    -------
2  Job2                 Completed  True          Server01    Get-Process
3  Job3                 Failed     False         localhost   Get-Process

Możesz również użyć Get-Job polecenia w zadaniu podrzędnym, jak pokazano w poniższym poleceniu:

PS> Get-Job Job3

Id Name   PSJobTypeName State      HasMoreData   Location    Command
-- ----   ------------- -----      -----------   --------    -------
3  Job3                 Failed     False         localhost   Get-Process

Konfiguracja zadania podrzędnego zależy od polecenia, którego używasz do uruchomienia zadania.

  • Gdy używasz polecenia Start-Job do uruchamiania zadania na komputerze lokalnym, zadanie składa się z zadania nadrzędnego wykonawczego i podrzędnego zadania, które uruchamia polecenie.

  • Gdy używasz parametru Invoke-CommandAsJob, aby uruchomić zadanie na co najmniej jednym komputerze, zadanie składa się z zadania nadrzędnego wykonawczego i podrzędnego zadania dla każdego zadania uruchomionego na każdym komputerze.

  • Gdy używasz Invoke-Command polecenia do uruchamiania Start-Job polecenia na co najmniej jednym komputerze zdalnym, wynik jest taki sam jak polecenie lokalne uruchamiane na każdym komputerze zdalnym. Polecenie zwraca obiekt zadania dla każdego komputera. Obiekt zadania składa się z zadania nadrzędnego wykonawczego i jednego podrzędnego zadania, które uruchamia polecenie.

Zadanie nadrzędne reprezentuje wszystkie zadania podrzędne. Podczas zarządzania zadaniem nadrzędnym zarządzasz również skojarzonymi zadaniami podrzędnym. Jeśli na przykład zatrzymasz zadanie nadrzędne, wszystkie zadania podrzędne zostaną zatrzymane. Jeśli uzyskasz wyniki zadania nadrzędnego, uzyskasz wyniki wszystkich zadań podrzędnych.

Można jednak zarządzać zadaniami podrzędnimi indywidualnie. Jest to najbardziej przydatne, gdy chcesz zbadać problem z zadaniem lub uzyskać wyniki tylko jednego z wielu zadań podrzędnych rozpoczętych przy użyciu parametru AsJob .Invoke-Command

Następujące polecenie używa parametru AsJob polecenia , Invoke-Command aby uruchomić zadania w tle na komputerze lokalnym i dwóch komputerach zdalnych. Polecenie zapisuje zadanie w zmiennej $j .

PS> $j = Invoke-Command -ComputerName localhost, Server01, Server02 `
-Command {Get-Date} -AsJob

Po wyświetleniu właściwości Name i ChildJob zadania w programie $jpokazuje, że polecenie zwróciło obiekt zadania z trzema zadaniami podrzędnymi, po jednym dla każdego komputera.

PS> $j | Format-List Name, ChildJobs

Name      : Job3
ChildJobs : {Job4, Job5, Job6}

Po wyświetleniu zadania nadrzędnego zostanie wyświetlone, że zadanie nie powiodło się.

PS> $j

Id Name   PSJobTypeName State      HasMoreData   Location
-- ----   ------------- -----      -----------   --------
3  Job3   RemotingJob   Failed     False         localhost,Server...

Ale po uruchomieniu Get-Job polecenia, które pobiera zadania podrzędne, dane wyjściowe pokazują, że tylko jedno zadanie podrzędne nie powiodło się.

PS> Get-Job -IncludeChildJobs

Id  Name   PSJobTypeName State      HasMoreData   Location    Command
--  ----   ------------- -----      -----------   --------    -------
3   Job3   RemotingJob   Failed     False         localhost,Server...
4   Job4                 Completed  True          localhost   Get-Date
5   Job5                 Failed     False         Server01    Get-Date
6   Job6                 Completed  True          Server02    Get-Date

Aby uzyskać wyniki wszystkich zadań podrzędnych, użyj Receive-Job polecenia cmdlet , aby uzyskać wyniki zadania nadrzędnego. Można jednak również uzyskać wyniki określonego zadania podrzędnego, jak pokazano w poniższym poleceniu.

PS> Receive-Job -Name Job6 -Keep | Format-Table ComputerName,
>> DateTime -AutoSize
ComputerName DateTime
------------ --------
Server02     Thursday, March 13, 2008 4:16:03 PM

Funkcja zadań podrzędnych zadań w tle programu PowerShell zapewnia większą kontrolę nad uruchomionymi zadaniami.

Typy zadań

Program PowerShell obsługuje różne typy zadań dla różnych zadań. Począwszy od Windows PowerShell 3.0, deweloperzy mogą pisać "karty źródłowe zadania", które dodają nowe typy zadań do programu PowerShell i dołączają karty źródłowe zadań w modułach. Podczas importowania modułu można użyć nowego typu zadania w sesji.

Na przykład moduł PSScheduledJob dodaje zaplanowane zadania, a moduł PSWorkflow dodaje zadania przepływu pracy.

Niestandardowe typy zadań mogą znacznie różnić się od standardowych zadań w tle programu PowerShell. Na przykład zaplanowane zadania są zapisywane na dysku; nie istnieją tylko w określonej sesji. Zadania przepływu pracy można wstrzymać i wznowić.

Polecenia cmdlet używane do zarządzania zadaniami niestandardowymi zależą od typu zadania. W przypadku niektórych należy użyć standardowych poleceń cmdlet zadań, takich jak Get-Job i Start-Job. Inne są dostarczane z wyspecjalizowanymi poleceniami cmdlet, które zarządzają tylko określonym typem zadania. Aby uzyskać szczegółowe informacje na temat niestandardowych typów zadań, zobacz tematy pomocy dotyczące typu zadania.

Aby znaleźć typ zadania, użyj Get-Job polecenia cmdlet . Get-Job zwraca różne obiekty zadań dla różnych typów zadań. Wartość właściwości PSJobTypeName obiektów zadania, która Get-Job zwraca, wskazuje typ zadania.

W poniższej tabeli wymieniono typy zadań, które są dostarczane z programem PowerShell.

Typ zadania Opis
BackgroundJob Rozpoczęto korzystanie z Start-Job polecenia cmdlet .
RemoteJob Rozpoczęto korzystanie z parametru AsJob parametru
Invoke-Command polecenie cmdlet.
PSWorkflowJob Rozpoczęto korzystanie z parametru AsJob przepływu pracy.
PSScheduledJob Wystąpienie zaplanowanego zadania uruchomionego przez wyzwalacz zadania.
CiMJob Rozpoczęto korzystanie z parametru AsJob polecenia cmdlet z polecenia cmdlet
Moduł CDXML.
WMIJob Rozpoczęto korzystanie z parametru AsJob polecenia cmdlet z polecenia cmdlet
Moduł WMI.
PSEventJob Utworzono przy użyciu poleceniaRegister-ObjectEvent i określono
akcja z parametrem Akcja .

UWAGA: Przed użyciem Get-Job polecenia cmdlet w celu pobrania zadań określonego typu sprawdź, czy moduł, który dodaje typ zadania, jest importowany do bieżącej sesji. Get-Job W przeciwnym razie nie pobiera zadań tego typu.

Przykłady

Następujące polecenia umożliwiają utworzenie lokalnego zadania w tle, zdalnego zadania w tle, zadania przepływu pracy i zaplanowanego zadania. Następnie używa Get-Job polecenia cmdlet do pobierania zadań. Get-Job program nie pobiera zaplanowanego zadania, ale pobiera wszystkie uruchomione wystąpienia zaplanowanego zadania.

Uruchom zadanie w tle na komputerze lokalnym.

PS> Start-Job -Name LocalData {Get-Process}

Id Name        PSJobTypeName   State   HasMoreData   Location   Command
-- ----        -------------   -----   -----------   --------   -------
2  LocalData   BackgroundJob   Running        True   localhost  Get-Process

Uruchom zadanie w tle uruchamiane na komputerze zdalnym.

PS> Invoke-Command -ComputerName Server01 {Get-Process} `
-AsJob -JobName RemoteData

Id  Name        PSJobTypeName  State   HasMoreData   Location   Command
--  ----        -------------  -----   -----------   --------   -------
2   RemoteData  RemoteJob      Running        True   Server01   Get-Process

Tworzenie zaplanowanego zadania

PS>  Register-ScheduledJob -Name ScheduledJob -ScriptBlock `
 {Get-Process} -Trigger (New-JobTrigger -Once -At "3 PM")

Id         Name            JobTriggers     Command       Enabled
--         ----            -----------     -------       -------
1          ScheduledJob    1               Get-Process   True

Utwórz przepływ pracy.

PS> workflow Test-Workflow {Get-Process}

Uruchom przepływ pracy jako zadanie.


PS> Test-Workflow -AsJob -JobName TestWFJob

Id  Name       PSJobTypeName   State   HasMoreData   Location   Command
--  ----       -------------   -----   -----------   --------   -------
2   TestWFJob  PSWorkflowJob   NotStarted     True   localhost  Get-Process

Pobierz zadania. Polecenie Get-Job nie pobiera zaplanowanych zadań, ale pobiera wystąpienia zaplanowanego zadania, które są uruchamiane.

PS> Get-Job

Id  Name         PSJobTypeName  State     HasMoreData  Location  Command
--  ----         -------------  -----     -----------  --------  -------
2   LocalData    BackgroundJob  Completed True         localhost Get-Process
4   RemoteData   RemoteJob      Completed True         Server01  Get-Process
6   TestWFJob    PSWorkflowJob  Completed True         localhost WorkflowJob
8   ScheduledJob PSScheduledJob Completed True         localhost Get-Process

Aby uzyskać zaplanowane zadania, użyj Get-ScheduledJob polecenia cmdlet .

PS> Get-ScheduledJob

Id         Name            JobTriggers     Command       Enabled
--         ----            -----------     -------       -------
1          ScheduledJob    1               Get-Process   True

Zobacz też