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-Command
zadanie 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-Command
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. 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 $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...
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