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 useStart-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 ofInvoke-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 uruchamianiaStart-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 useInvoke-Command
to run aStart-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-Job
Polecenie 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
- about_Jobsabout_Jobs
- about_Remote_Jobsabout_Remote_Jobs
- about_Thread_Jobsabout_Thread_Jobs
- about_Remoteabout_Remote
- Wywołaj polecenieInvoke-Command
- Start — zadanieStart-Job
- Get-JobGet-Job
- Wait-JobWait-Job
- Stop — zadanieStop-Job
- Usuń zadanieRemove-Job
- New-PSSessionNew-PSSession
- Enter-PSSessionEnter-PSSession
- Exit — PSSessionExit-PSSession