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 wyjaśniono koncepcję zadania w tle i przedstawiono informacje techniczne dotyczące sposobu działania zadań w tle w programie PowerShell.

Ten temat stanowi uzupełnienie about_Jobs, about_Thread_Jobs i about_Remote_Jobs tematach.

Informacje o zadaniach w tle

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

Po uruchamianiu polecenia synchronicznego 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ć z innymi zadaniami podczas wykonywania zadania w tle.

Jednak po uruchomieniu zadania w tle nie otrzymasz wyników natychmiast, nawet jeśli zadanie jest uruchamiane bardzo szybko. Zwracany 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ż uruchomić 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 połączenie tymczasowe, które jest tworzone tylko w celu uruchomienia zadania, a następnie jest niszczone, lub może być trwałym pssession , którego można użyć do uruchomienia kilku powiązanych zadań lub poleceń.

Korzystanie z polecenia cmdlet zadania

Użyj polecenia Start-Job , aby uruchomić zadanie w tle na komputerze lokalnym. Start-Job Zwraca obiekt zadania. Można również pobrać obiekty reprezentujące zadania uruchomione na komputerze lokalnym za pomocą Get-Job polecenia cmdlet .

Aby uzyskać wyniki zadania, użyj Receive-Job polecenia . Jeśli zadanie nie zostanie ukończone, zwraca Receive-Job wyniki częściowe. Możesz również użyć polecenia Wait-Job 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 o tym, jak działają polecenia cmdlet, zobacz temat Pomocy 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 Invoke-Command, takiego jak , Invoke-Command lub użyj polecenia cmdlet Start-Job , aby uruchomić polecenie zdalnie. Zadanie w tle można również uruchomić 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 rozpoczętych przy Start-Job użyciu parametru asjob Invoke-Commandlub nadrzędnego zadania nadrzędnego jest dyrektorem. Nie uruchamia żadnych poleceń ani nie zwraca żadnych wyników. Polecenia są faktycznie uruchamiane przez zadania podrzędne. Zadania uruchomione przy użyciu innych polecenia cmdlet mogą działać inaczej.

Zadania podrzędne są przechowywane we właściwości ChildJobs nadrzędnego obiektu zadania. Właściwość ChildJobs może zawierać jeden lub wiele obiektów zadań podrzędnych. Obiekty zadań podrzędnych mają identyfikatory Name, ID i InstanceId , które różnią się od zadania nadrzędnego, dzięki czemu można zarządzać zadaniami nadrzędnymi i podrzędnym pojedynczo lub jako jednostką.

Aby uzyskać zadania nadrzędne i podrzędne zadania, użyj parametru IncludeChildJobs Get-Job 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 o określonej wartości State , użyj parametru ChildJobState Get-Job 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 pobrać zadania podrzędne 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żna również użyć polecenia w Get-Job 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 służącego do uruchamiania zadania.

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

  • W przypadku użycia parametru AsJob Invoke-Command programu w celu uruchomienia zadania na co najmniej jednym komputerze zadanie składa się z nadrzędnego zadania wykonawczego i zadania podrzędnego dla każdego zadania uruchomionego na każdym komputerze.

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

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

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

Następujące polecenie używa AsJob parametru do Invoke-Command uruchamiania zadań 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

Wyświetlenie właściwości Name i ChildJob $jzadania w programie pokazuje, że polecenie zwróciło obiekt zadania z trzema zadaniami podrzędnym, po jednym dla każdego komputera.

PS> $j | Format-List Name, ChildJobs

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

Wyświetlenie zadania nadrzędnego pokazuje, że zadanie zakończyło się niepowodzeniem.

PS> $j

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

Jednak po uruchomieniu polecenia Get-Job , 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ń nadrzędnych, Receive-Job użyj polecenia cmdlet w celu uzyskania wyników 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 uruchamianymi 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ła zadania do modułów. Podczas importowania modułu możesz 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 zawieszać i wznawiać.

Polecenia cmdlet służące do zarządzania zadaniami niestandardowymi zależą od typu zadania. W przypadku niektórych z nich należy użyć standardowych polecenia cmdlet zadań, takich jak Get-Job i Start-Job. Inne są wyposażone w wyspecjalizowane polecenia cmdlet, które zarządzają tylko określonym typem zadania. Aby uzyskać szczegółowe informacje o niestandardowych typach zadań, zobacz tematy pomocy dotyczące typu zadania.

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

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

Typ zadania Opis
BackgroundJob Rozpoczęto przy użyciu Start-Job polecenia cmdlet .
RemoteJob Rozpoczęto korzystanie z parametru AsJob
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
Moduł CDXML.
WMIJob Rozpoczęto korzystanie z parametru AsJob polecenia cmdlet z
Moduł WMI.
PSEventJob Utworzono przyRegister-ObjectEvent użyciu i określono
za pomocą parametru Akcja.

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

Przykłady

Następujące polecenia tworzą lokalne zadanie w tle, zdalne zadanie w tle, zadanie przepływu pracy i zaplanowane zadanie. Następnie używa polecenia Get-Job cmdlet w celu uzyskania zadań. Get-Job 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, które jest 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 zostały uruchomione.

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ż