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-Job
IncludeChildJobs 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-Job
ChildJobState 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-Command
AsJob, 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 uruchamianiaStart-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 $j
pokazuje, ż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śl element |
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 polecenia cmdlet do pobierania Get-Job
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 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