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 dotyczących about_Jobs, about_Thread_Jobs i about_Remote_Jobs .

Informacje o zadaniach w tle

Zadanie w tle uruchamia asynchronicznie polecenie lub wyrażenie. Może on uruchamiać polecenie cmdlet, funkcję, skrypt lub dowolne 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.

Gdy polecenie synchroniczne zostanie uruchomione, wiersz polecenia programu PowerShell zostanie pominięty 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 wtedy, gdy 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żesz również uruchomić polecenia, aby zatrzymać zadanie, poczekać na ukończenie zadania i usunąć zadanie.

Aby harmonogram 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 być trwałe PSSession , którego można użyć do uruchamiania kilku powiązanych zadań lub poleceń.

Używanie poleceń cmdlet zadania

Start-Job Użyj polecenia , aby uruchomić zadanie w tle na komputerze lokalnym. Start-Job zwraca obiekt zadania. Można również pobrać obiekty reprezentujące zadania, które zostały uruchomione na komputerze lokalnym 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 częściowe wyniki. 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 o sposobie 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. Zadanie w tle można również uruchomić w sesji interaktywnej.

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 użyciu Start-Job parametru AsJob polecenia Invoke-Commandzadanie nadrzędne jest kierownictwem. Nie uruchamia żadnych poleceń ani nie zwraca żadnych wyników. Polecenia są 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 zadań podrzędnych mają wartości 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ędnymi pojedynczo lub jako jednostka.

Aby uzyskać zadania nadrzędne i podrzędne zadania zadania, użyj parametru Get-Job IncludeChildJobs polecenia cmdlet . Parametr IncludeChildJob został wprowadzony w programie 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 pobrać zadanie nadrzędne i tylko zadania podrzędne z określoną wartością Stanu, użyj parametru Get-Job ChildJobState polecenia cmdlet. Parametr ChildJobState został wprowadzony w programie 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 zadania dla wszystkich wersji 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ć 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 używanego do uruchomienia zadania.

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

  • Gdy używasz parametru Invoke-Command AsJob do uruchamiania zadania na co najmniej jednym komputerze, zadanie składa się z zadania nadrzędnego kierownictwa i zadania podrzędnego dla każdego zadania uruchomionego na każdym komputerze.

  • W przypadku uruchamiania Invoke-CommandStart-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. Zarządzasz zadaniem nadrzędnym, a także zarządzasz 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ędnym indywidualnie. Jest to najbardziej przydatne, gdy chcesz zbadać problem z zadaniem lub uzyskać wyniki tylko jednego z kilku zadań podrzędnych rozpoczętych przy użyciu parametru AsJob polecenia 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...

Jednak 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. Ale możesz 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 funkcji

Program PowerShell obsługuje różne typy zadań dla różnych zadań. Począwszy od programu Windows PowerShell 3.0, deweloperzy mogą pisać "karty źródłowe zadań", które dodają nowe typy zadań do programu PowerShell i zawierają 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ą się znacznie różnić 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 funkcji opis
BackgroundJob Rozpoczęto Start-Job korzystanie z polecenia cmdlet .
RemoteJob Rozpoczęto korzystanie z parametru AsJob polecenia
Invoke-Command Polecenie cmdlet.
ZADANIE 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 elementu
Moduł CDXML.
WMIJob Rozpoczęto korzystanie z parametru AsJob polecenia cmdlet z elementu
Moduł WMI.
PSEventJob Utworzono przy użyciu metodyRegister-ObjectEvent i określ
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 tworzą lokalne zadanie w tle, zdalne zadanie w tle, zadanie przepływu pracy i zaplanowane zadanie. 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 uruchomione 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ż