Informacje o szczegółach zadaniaAbout Job Details

Krótki opisShort description

Zawiera szczegółowe informacje o zadaniach w tle na komputerach lokalnych i zdalnych.Provides details about background jobs on local and remote computers.

Szczegółowy opisDetailed description

W tym temacie opisano koncepcję zadania w tle i przedstawiono informacje techniczne na temat działania zadań w tle w programie PowerShell.This topic explains the concept of a background job and provides technical information about how background jobs work in PowerShell.

Ten temat stanowi uzupełnienie tematów about_Jobs, about_Thread_Jobsi about_Remote_Jobs .This topic is a supplement to the about_Jobs, about_Thread_Jobs, and about_Remote_Jobs topics.

Informacje o zadaniach w tleAbout background jobs

Zadanie w tle uruchamia polecenie lub wyrażenie asynchronicznie.A background job runs a command or expression asynchronously. Może uruchomić polecenie cmdlet, funkcję, skrypt lub inne zadanie oparte na poleceniu.It might run a cmdlet, a function, a script, or any other command-based task. Jest on przeznaczony do uruchamiania poleceń, które trwają dłuższy czas, ale można go użyć do uruchomienia dowolnego polecenia w tle.It is designed to run commands that take an extended period of time, but you can use it to run any command in the background.

Po uruchomieniu polecenia synchronicznego wiersz polecenia programu PowerShell jest pomijany, dopóki polecenie nie zostanie ukończone.When a synchronous command runs, the PowerShell command prompt is suppressed until the command is complete. Ale zadanie w tle nie powoduje pomijania wiersza polecenia programu PowerShell.But a background job does not suppress the PowerShell prompt. Polecenie uruchomienia zadania w tle zwraca obiekt zadania.A command to start a background job returns a job object. Monit zwraca natychmiast, aby można było korzystać z innych zadań podczas działania w tle.The prompt returns immediately so you can work on other tasks while the background job runs.

Jednak po uruchomieniu zadania w tle nie uzyskuje wyników natychmiast, nawet jeśli zadanie działa bardzo szybko.However, when you start a background job, you do not get the results immediately even if the job runs very quickly. Zwrócony obiekt zadania zawiera przydatne informacje o zadaniu, ale nie zawiera wyników zadania.The job object that is returned contains useful information about the job, but it does not contain the job results. Aby uzyskać wyniki zadania, należy uruchomić osobne polecenie.You must run a separate command to get the job results. Można również uruchomić polecenia, aby zatrzymać zadanie, oczekiwać na ukończenie zadania i usunąć zadanie.You can also run commands to stop the job, to wait for the job to be completed, and to delete the job.

Aby chronometraż zadania w tle był niezależny od innych poleceń, każde zadanie w tle jest uruchamiane we własnej sesji programu PowerShell.To make the timing of a background job independent of other commands, each background job runs in its own PowerShell session. 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łą PSSessioną , za pomocą którego można uruchamiać kilka powiązanych zadań lub poleceń.However, this can be a temporary connection that is created only to run the job and is then destroyed, or it can be a persistent PSSession that you can use to run several related jobs or commands.

Korzystanie z poleceń cmdlet zadaniaUsing the job cmdlets

Użyj Start-Job polecenia, aby uruchomić zadanie w tle na komputerze lokalnym.Use a Start-Job command to start a background job on a local computer. Start-Job zwraca obiekt zadania.Start-Job returns a job object. Można również uzyskać obiekty reprezentujące zadania, które zostały uruchomione na komputerze lokalnym przy użyciu Get-Job polecenia cmdlet.You can also get objects representing the jobs that were started on the local computer using the Get-Job cmdlet.

Aby uzyskać wyniki zadania, użyj Receive-Job polecenia.To get the job results, use a Receive-Job command. Jeśli zadanie nie zostało ukończone, Receive-Job zwraca częściowe wyniki.If the job is not complete, Receive-Job returns partial results. 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.You can also use the Wait-Job cmdlet to suppress the command prompt until one or all of the jobs that were started in the session are complete.

Aby zatrzymać zadanie w tle, użyj Stop-Job polecenia cmdlet.To stop a background job, use the Stop-Job cmdlet. Aby usunąć zadanie, użyj Remove-Job polecenia cmdlet.To delete a job, use the Remove-Job cmdlet.

Aby uzyskać więcej informacji o działaniu poleceń cmdlet, zobacz temat pomocy dla każdego polecenia cmdlet i zobacz about_Jobs.For more information about how the cmdlets work, see the Help topic for each cmdlet, and see about_Jobs.

Uruchamianie zadań w tle na komputerach zdalnychStarting background jobs on remote computers

Możesz tworzyć zadania w tle i zarządzać nimi na komputerze lokalnym lub zdalnym.You can create and manage background jobs on a local or remote computer. Aby zdalnie uruchomić zadanie w tle, należy użyć parametru AsJob polecenia cmdlet, takiego jak Invoke-Command lub użyć Invoke-Command polecenia cmdlet do Start-Job zdalnego uruchomienia polecenia.To run a background job remotely, use the AsJob parameter of a cmdlet such as Invoke-Command, or use the Invoke-Command cmdlet to run a Start-Job command remotely. Zadanie w tle można także uruchomić w sesji interaktywnej.You can also start a background job in an interactive session.

Aby uzyskać więcej informacji na temat zadań zdalnego w tle, zobacz about_Remote_Jobs.For more information about remote background jobs, see about_Remote_Jobs.

Zadania podrzędneChild jobs

Każde zadanie w tle składa się z zadania nadrzędnego i co najmniej jednego zadania podrzędnego.Each background job consists of a parent job and one or more child jobs. W zadaniach rozpoczętych przy użyciu Start-Job lub AsJob parametru programu Invoke-Command zadanie nadrzędne jest kierownikiem.In jobs started using Start-Job or the AsJob parameter of Invoke-Command, the parent job is an executive. Nie uruchamia żadnych poleceń ani nie zwraca żadnych wyników.It does not run any commands or return any results. Polecenia są faktycznie uruchamiane przez zadania podrzędne.The commands are actually run by the child jobs. Zadania uruchomione przy użyciu innych poleceń cmdlet mogą się różnić.Jobs started using other cmdlets might work differently.

Zadania podrzędne są przechowywane we właściwości ChildJobs obiektu zadania nadrzędnego.The child jobs are stored in the ChildJobs property of the parent job object. Właściwość ChildJobs może zawierać jeden lub wiele obiektów podrzędnych zadań.The ChildJobs property can contain one or many child job objects. Podrzędne obiekty zadań mają nazwy , identyfikatory i identyfikator 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 jednostką.The child job objects have a Name , ID , and InstanceId that differ from the parent job so that you can manage the parent and child jobs individually or as a unit.

Aby uzyskać zadania nadrzędne i podrzędne zadania, należy użyć parametru IncludeChildJobs Get-Job polecenia cmdlet.To get the parent and child jobs of a job, use the IncludeChildJobs parameter of the Get-Job cmdlet. Parametr IncludeChildJob został wprowadzony w programie Windows PowerShell 3,0.The IncludeChildJob parameter was introduced in 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 ChildJobState Get-Job polecenia cmdlet.To get the parent job and only the child jobs with a particular State value, use the ChildJobState parameter of the Get-Job cmdlet. Parametr ChildJobState został wprowadzony w programie Windows PowerShell 3,0.The ChildJobState parameter was introduced in 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 we wszystkich wersjach programu PowerShell, należy użyć właściwości ChildJob zadania nadrzędnego.To get the child jobs of a job on all versions of PowerShell, use the ChildJob property of the parent job.

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 następującym poleceniu:You can also use a Get-Job command on the child job, as shown in the following command:

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żytego do uruchomienia zadania.The configuration of the child job depends on the command that you use to start the job.

  • W przypadku korzystania Start-Job z programu do uruchamiania zadania na komputerze lokalnym, zadanie składa się z zadania nadrzędnego dyrektora i zadania podrzędnego uruchamiającego polecenie.When you use Start-Job to start a job on a local computer, the job consists of an executive parent job and a child job that runs the command.

  • W przypadku użycia parametru AsJob programu w Invoke-Command celu uruchomienia zadania na jednym lub kilku komputerach zadanie składa się z zadania nadrzędnego dla kierownictwa i zadania podrzędnego dla każdego zadania uruchomionego na każdym komputerze.When you use the AsJob parameter of Invoke-Command to start a job on one or more computers, the job consists of an executive parent job and a child job for each job run on each computer.

  • W przypadku korzystania Invoke-Command z programu do uruchamiania Start-Job polecenia na co najmniej jednym komputerze zdalnym wynik jest taki sam jak polecenie lokalne uruchomione na każdym z komputerów zdalnych.When you use Invoke-Command to run a Start-Job command on one or more remote computers, the result is the same as a local command run on each remote computer. Polecenie zwraca obiekt zadania dla każdego komputera.The command returns a job object for each computer. Obiekt zadania składa się z zadania nadrzędnego dyrektora i jednego zadania podrzędnego uruchamiającego polecenie.The job object consists of an executive parent job and one child job that runs the command.

Zadanie nadrzędne reprezentuje wszystkie zadania podrzędne.The parent job represents all of the child jobs. Podczas zarządzania zadaniem nadrzędnym można również zarządzać skojarzonymi zadaniami podrzędnymi.When you manage a parent job, you also manage the associated child jobs. Na przykład jeśli zatrzymasz zadanie nadrzędne, wszystkie zadania podrzędne zostaną zatrzymane.For example, if you stop a parent job, all child jobs are stopped. Jeśli uzyskasz wyniki zadania nadrzędnego, uzyskasz wyniki wszystkich zadań podrzędnych.If you get the results of a parent job, you get the results of all child jobs.

Można jednak zarządzać zadaniami podrzędnymi pojedynczo.However, you can also manage child jobs individually. Jest to najbardziej przydatne, gdy chcesz zbadać problem z zadaniem lub uzyskać wyniki tylko jednej z wielu zadań podrzędnych rozpoczętych przy użyciu parametru AsJob Invoke-Command .This is most useful when you want to investigate a problem with a job or get the results of only one of a number of child jobs started using the AsJob parameter of Invoke-Command.

Następujące polecenie używa parametru AsJob w Invoke-Command celu uruchamiania zadań w tle na komputerze lokalnym i dwóch komputerach zdalnych.The following command uses the AsJob parameter of Invoke-Command to start background jobs on the local computer and two remote computers. Polecenie zapisuje zadanie w $j zmiennej.The command saves the job in the $j variable.

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.When you display the Name and ChildJob properties of the job in $j, it shows that the command returned a job object with three child jobs, one for each computer.

PS> $j | Format-List Name, ChildJobs

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

Wyświetlenie zadania nadrzędnego powoduje, że zadanie nie powiodło się.When you display the parent job, it shows that the job failed.

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ę.But when you run a Get-Job command that gets the child jobs, the output shows that only one child job failed.

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.To get the results of all child jobs, use the Receive-Job cmdlet to get the results of the parent job. Ale można również uzyskać wyniki określonego zadania podrzędnego, jak pokazano w poniższym poleceniu.But you can also get the results of a particular child job, as shown in the following command.

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 daje większą kontrolę nad wykonywanymi zadaniami.The child jobs feature of PowerShell background jobs gives you more control over the jobs that you run.

Typy zadańJob types

Program PowerShell obsługuje różne typy zadań dla różnych zadań.PowerShell supports different types of jobs for different tasks. Począwszy od programu Windows PowerShell 3,0, deweloperzy mogą napisać "adaptery źródłowe zadań", które dodają nowe typy zadań do programu PowerShell i zawierają karty źródłowe zadań w modułach.Beginning in Windows PowerShell 3.0, developers can write "job source adapters" that add new job types to PowerShell and include the job source adapters in modules. Podczas importowania modułu można użyć nowego typu zadania w sesji.When you import the module, you can use the new job type in your session.

Na przykład moduł PSScheduledJob dodaje zaplanowane zadania i moduł PSWorkflow dodaje zadania przepływu pracy.For example, the PSScheduledJob module adds scheduled jobs and the PSWorkflow module adds workflow jobs.

Niestandardowe typy zadań mogą różnić się znacznie od standardowych zadań w tle programu PowerShell.Custom jobs types might differ significantly from standard PowerShell background jobs. Na przykład zaplanowane zadania są zapisywane na dysku; nie istnieją one tylko w określonej sesji.For example, scheduled jobs are saved on disk; they do not exist only in a particular session. Zadania przepływu pracy można wstrzymać i wznowić.Workflow jobs can be suspended and resumed.

Polecenia cmdlet służące do zarządzania zadaniami niestandardowymi zależą od typu zadania.The cmdlets that you use to manage custom jobs depend on the job type. W przypadku niektórych, należy użyć standardowych poleceń cmdlet zadania, takich jak Get-Job i Start-Job .For some, you use the standard job cmdlets, such as Get-Job and Start-Job. Inne osoby mają wyspecjalizowane polecenia cmdlet, które zarządzają tylko określonym typem zadania.Others come with specialized cmdlets that manage only a particular type of job. Aby uzyskać szczegółowe informacje na temat niestandardowych typów zadań, zobacz tematy pomocy dotyczące typu zadania.For detailed information about custom job types, see the help topics about the job type.

Aby znaleźć typ zadania zadania, należy użyć Get-Job polecenia cmdlet.To find the job type of a job, use the Get-Job cmdlet. Get-Job zwraca różne obiekty zadań dla różnych typów zadań.Get-Job returns different job objects for different types of jobs. Wartość właściwości PSJobTypeName obiektów zadania, która Get-Job zwraca wskazuje typ zadania.The value of the PSJobTypeName property of the job objects that Get-Job returns indicates the job type.

Poniższa tabela zawiera listę typów zadań, które są dostarczane z programem PowerShell.The following table lists the job types that come with PowerShell.

Typ zadaniaJob Type OpisDescription
BackgroundJobBackgroundJob Rozpoczęto korzystanie z Start-Job polecenia cmdlet.Started using the Start-Job cmdlet.
RemoteJobRemoteJob Rozpoczęto przy użyciu parametru AsJobStarted using the AsJob parameter of the
Invoke-Command parametr.Invoke-Command cmdlet.
PSWorkflowJobPSWorkflowJob Rozpoczęto korzystanie z AsJob parametru przepływu pracy.Started using the AsJob parameter of a workflow.
PSScheduledJobPSScheduledJob Wystąpienie zaplanowanego zadania uruchomionego przez wyzwalacz zadania.An instance of a scheduled job started by a job trigger.
CIMJobCIMJob Rozpoczęto korzystanie z parametru AsJob polecenia cmdlet zStarted using the AsJob parameter of a cmdlet from a
Moduł CDXML.CDXML module.
WMIJobWMIJob Rozpoczęto korzystanie z parametru AsJob polecenia cmdlet zStarted using the AsJob parameter of a cmdlet from a
Moduł WMI.WMI module.
PSEventJobPSEventJob Utworzono przy użyciu Register-ObjectEvent i określającCreated usingRegister-ObjectEvent and specifying an
Akcja z parametrem akcji .action with the Action parameter.

Uwaga: przed użyciem Get-Job polecenia cmdlet w celu uzyskania zadań określonego typu Sprawdź, czy moduł, który dodaje typ zadania, został zaimportowany do bieżącej sesji.NOTE: Before using the Get-Job cmdlet to get jobs of a particular type, verify that the module that adds the job type is imported into the current session. W przeciwnym razie program nie Get-Job Pobiera zadań tego typu.Otherwise, Get-Job does not get jobs of that type.

PrzykładyExamples

Następujące polecenia tworzą lokalne zadanie w tle, zdalne zadanie w tle, zadanie przepływu pracy i zaplanowane zadanie.The following commands create a local background job, a remote background job, a workflow job, and a scheduled job. Następnie używa Get-Job polecenia cmdlet w celu pobrania zadań.Then, it uses the Get-Job cmdlet to get the jobs. Get-Job nie otrzymuje zaplanowanego zadania, ale pobiera uruchomione wystąpienia zaplanowanego zadania.Get-Job does not get the scheduled job, but it gets any started instances of the scheduled job.

Uruchom zadanie w tle na komputerze lokalnym.Start a background job on the local computer.

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.Start a background job that runs on a remote computer.

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 zadaniaCreate a scheduled job

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.Create a workflow.

PS> workflow Test-Workflow {Get-Process}

Uruchom przepływ pracy jako zadanie.Run the workflow as a job.


PS> Test-Workflow -AsJob -JobName TestWFJob

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

Pobierz zadania.Get the jobs. Get-JobPolecenie nie pobiera zaplanowanych zadań, ale pobiera wystąpienia zaplanowanego zadania, które zostały uruchomione.The Get-Job command does not get scheduled jobs, but it gets instances of the scheduled job that are started.

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.To get scheduled jobs, use the Get-ScheduledJob cmdlet.

PS> Get-ScheduledJob

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

Zobacz teżSee also