Om jobb informationAbout Job Details

Kort beskrivningShort description

Innehåller information om bakgrunds jobb på lokala datorer och fjärrdatorer.Provides details about background jobs on local and remote computers.

Detaljerad beskrivningDetailed description

Det här avsnittet beskriver konceptet med ett bakgrunds jobb och ger teknisk information om hur bakgrunds jobb fungerar i PowerShell.This topic explains the concept of a background job and provides technical information about how background jobs work in PowerShell.

Det här avsnittet är ett tillägg till avsnitten about_Jobs, about_Thread_Jobsoch about_Remote_Jobs .This topic is a supplement to the about_Jobs, about_Thread_Jobs, and about_Remote_Jobs topics.

Om bakgrunds jobbAbout background jobs

Ett bakgrunds jobb kör ett kommando eller uttryck asynkront.A background job runs a command or expression asynchronously. Det kan köra en cmdlet, en funktion, ett skript eller någon annan kommando-baserad uppgift.It might run a cmdlet, a function, a script, or any other command-based task. Den är utformad för att köra kommandon som tar en längre tid, men du kan använda det för att köra alla kommandon i bakgrunden.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.

När ett synkront kommando körs, ignoreras PowerShell-Kommandotolken tills kommandot har slutförts.When a synchronous command runs, the PowerShell command prompt is suppressed until the command is complete. Men ett bakgrunds jobb förhindrar inte PowerShell-prompten.But a background job does not suppress the PowerShell prompt. Ett kommando för att starta ett bakgrunds jobb returnerar ett jobb objekt.A command to start a background job returns a job object. Prompten återgår direkt så att du kan arbeta med andra uppgifter medan bakgrunds jobbet körs.The prompt returns immediately so you can work on other tasks while the background job runs.

När du startar ett bakgrunds jobb får du dock inte resultaten direkt även om jobbet körs mycket snabbt.However, when you start a background job, you do not get the results immediately even if the job runs very quickly. Jobbobjektet som returneras innehåller användbar information om jobbet, men det innehåller inte jobb resultatet.The job object that is returned contains useful information about the job, but it does not contain the job results. Du måste köra ett separat kommando för att hämta jobb resultatet.You must run a separate command to get the job results. Du kan också köra kommandon för att stoppa jobbet, vänta tills jobbet har slutförts och ta bort jobbet.You can also run commands to stop the job, to wait for the job to be completed, and to delete the job.

För att göra tids inställningen för ett bakgrunds jobb oberoende av andra kommandon körs varje bakgrunds jobb i en egen PowerShell-session.To make the timing of a background job independent of other commands, each background job runs in its own PowerShell session. Det kan dock vara en tillfällig anslutning som bara skapas för att köra jobbet och sedan destrueras, eller så kan det vara en permanent PSSession som du kan använda för att köra flera relaterade jobb eller kommandon.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.

Använda jobb-cmdletarUsing the job cmdlets

Använd ett Start-Job kommando för att starta ett bakgrunds jobb på en lokal dator.Use a Start-Job command to start a background job on a local computer. Start-Job Returnerar ett jobb objekt.Start-Job returns a job object. Du kan också hämta objekt som representerar de jobb som startades på den lokala datorn med hjälp av Get-Job cmdleten.You can also get objects representing the jobs that were started on the local computer using the Get-Job cmdlet.

Hämta jobb resultaten med hjälp av ett Receive-Job kommando.To get the job results, use a Receive-Job command. Om jobbet inte är klart Receive-Job returneras delvis resultat.If the job is not complete, Receive-Job returns partial results. Du kan också använda Wait-Job cmdleten för att ignorera kommando tolken tills ett eller flera av jobben som startades i sessionen har slutförts.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.

Om du vill stoppa ett bakgrunds jobb använder du Stop-Job cmdleten.To stop a background job, use the Stop-Job cmdlet. Använd cmdleten om du vill ta bort ett jobb Remove-Job .To delete a job, use the Remove-Job cmdlet.

Mer information om hur cmdletarna fungerar finns i hjälp avsnittet för varje cmdlet och se about_Jobs.For more information about how the cmdlets work, see the Help topic for each cmdlet, and see about_Jobs.

Starta bakgrunds jobb på fjärrdatorerStarting background jobs on remote computers

Du kan skapa och hantera bakgrunds jobb på en lokal dator eller fjärrdator.You can create and manage background jobs on a local or remote computer. Om du vill köra ett bakgrunds jobb via en fjärr anslutning använder du parametern AsJob för en cmdlet, till exempel Invoke-Command eller använder Invoke-Command cmdleten för att fjärrköra ett Start-Job kommando.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. Du kan också starta ett bakgrunds jobb i en interaktiv session.You can also start a background job in an interactive session.

Mer information om fjärran sluten bakgrunds jobb finns about_Remote_Jobs.For more information about remote background jobs, see about_Remote_Jobs.

Underordnade jobbChild jobs

Varje bakgrunds jobb består av ett överordnat jobb och ett eller flera underordnade jobb.Each background job consists of a parent job and one or more child jobs. I jobb som har startats med Start-Job eller AsJob -parametern för Invoke-Command är det överordnade jobbet en chef.In jobs started using Start-Job or the AsJob parameter of Invoke-Command, the parent job is an executive. Inga kommandon körs eller inga resultat returneras.It does not run any commands or return any results. Kommandona körs faktiskt av de underordnade jobben.The commands are actually run by the child jobs. Jobb som startas med andra cmdlets kan fungera annorlunda.Jobs started using other cmdlets might work differently.

De underordnade jobben lagras i egenskapen ChildJobs för objektet överordnat jobb.The child jobs are stored in the ChildJobs property of the parent job object. Egenskapen ChildJobs kan innehålla ett eller flera underordnade jobb objekt.The ChildJobs property can contain one or many child job objects. De underordnade jobb objekten har ett namn , ID och InstanceID som skiljer sig från det överordnade jobbet så att du kan hantera de överordnade och underordnade jobben individuellt eller som en enhet.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.

Om du vill hämta de överordnade och underordnade jobben för ett jobb använder du parametern IncludeChildJobs för Get-Job cmdleten.To get the parent and child jobs of a job, use the IncludeChildJobs parameter of the Get-Job cmdlet. IncludeChildJob -parametern introducerades i 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

Använd parametern ChildJobState för cmdleten om du vill hämta det överordnade jobbet och bara de underordnade jobben med ett visst tillstånds värde Get-Job .To get the parent job and only the child jobs with a particular State value, use the ChildJobState parameter of the Get-Job cmdlet. ChildJobState -parametern introducerades i 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

Använd egenskapen ChildJob för det överordnade jobbet för att hämta de underordnade jobben för ett jobb i alla versioner av PowerShell.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

Du kan också använda ett Get-Job kommando på det underordnade jobbet, som du ser i följande kommando: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

Konfigurationen av det underordnade jobbet beror på vilket kommando du använder för att starta jobbet.The configuration of the child job depends on the command that you use to start the job.

  • När du använder Start-Job för att starta ett jobb på en lokal dator består jobbet av ett överordnat överordnat jobb och ett underordnat jobb som kör kommandot.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.

  • När du använder AsJob -parametern för Invoke-Command för att starta ett jobb på en eller flera datorer består jobbet av ett överordnat överordnat jobb och ett underordnat jobb för varje jobb körning på varje dator.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.

  • När du använder Invoke-Command för att köra ett Start-Job kommando på en eller flera fjärrdatorer är resultatet detsamma som en lokal kommando körning på varje fjärrdator.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. Kommandot returnerar ett jobb objekt för varje dator.The command returns a job object for each computer. Jobbobjektet består av ett överordnat överordnat jobb och ett underordnat jobb som kör kommandot.The job object consists of an executive parent job and one child job that runs the command.

Det överordnade jobbet representerar alla underordnade jobb.The parent job represents all of the child jobs. När du hanterar ett överordnat jobb hanterar du även de associerade underordnade jobben.When you manage a parent job, you also manage the associated child jobs. Om du till exempel stoppar ett överordnat jobb stoppas alla underordnade jobb.For example, if you stop a parent job, all child jobs are stopped. Om du får resultatet av ett överordnat jobb får du resultatet av alla underordnade jobb.If you get the results of a parent job, you get the results of all child jobs.

Du kan dock även hantera underordnade jobb individuellt.However, you can also manage child jobs individually. Detta är mest användbart när du vill undersöka ett problem med ett jobb eller hämta resultatet av ett antal underordnade jobb som har startats med hjälp av parametern AsJob i 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.

Följande kommando använder AsJob -parametern för Invoke-Command för att starta bakgrunds jobb på den lokala datorn och två fjärrdatorer.The following command uses the AsJob parameter of Invoke-Command to start background jobs on the local computer and two remote computers. Kommandot sparar jobbet i $j variabeln.The command saves the job in the $j variable.

PS> $j = Invoke-Command -ComputerName localhost, Server01, Server02 `
-Command {Get-Date} -AsJob

När du visar egenskaperna för namn och ChildJob för jobbet i $j , visar det att kommandot returnerade ett jobb objekt med tre underordnade jobb, ett för varje dator.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}

När du visar det överordnade jobbet visar det att jobbet misslyckades.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...

Men när du kör ett Get-Job kommando som hämtar underordnade jobb, visar utdata att det bara finns ett underordnat jobb.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

Om du vill hämta resultatet av alla underordnade jobb använder du Receive-Job cmdleten för att hämta resultatet från det överordnade jobbet.To get the results of all child jobs, use the Receive-Job cmdlet to get the results of the parent job. Men du kan också hämta resultatet av ett visst underordnat jobb, som du ser i följande kommando.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

Med de underordnade jobben i PowerShell bakgrunds jobb får du mer kontroll över de jobb som du kör.The child jobs feature of PowerShell background jobs gives you more control over the jobs that you run.

JobbtyperJob types

PowerShell stöder olika typer av jobb för olika aktiviteter.PowerShell supports different types of jobs for different tasks. Från och med Windows PowerShell 3,0 kan utvecklare skriva "jobb käll kort" som lägger till nya jobb typer till PowerShell och inkluderar jobb käll korten i moduler.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. När du importerar modulen kan du använda den nya jobb typen i sessionen.When you import the module, you can use the new job type in your session.

PSScheduledJob-modulen lägger till exempel till schemalagda jobb och modulen PSWorkflow lägger till arbets flödes jobb.For example, the PSScheduledJob module adds scheduled jobs and the PSWorkflow module adds workflow jobs.

Anpassade jobb typer kan variera avsevärt från vanliga PowerShell-standardjobb.Custom jobs types might differ significantly from standard PowerShell background jobs. Schemalagda jobb sparas till exempel på disk. de finns inte bara i en viss session.For example, scheduled jobs are saved on disk; they do not exist only in a particular session. Arbets flödes jobb kan pausas och återupptas.Workflow jobs can be suspended and resumed.

De cmdletar som du använder för att hantera anpassade jobb beror på jobb typen.The cmdlets that you use to manage custom jobs depend on the job type. För vissa, använder du standard jobb-cmdlet: ar, till exempel Get-Job och Start-Job .For some, you use the standard job cmdlets, such as Get-Job and Start-Job. Andra har särskilda cmdletar som endast hanterar en viss typ av jobb.Others come with specialized cmdlets that manage only a particular type of job. Detaljerad information om anpassade jobb typer finns i hjälp avsnitten om jobb typen.For detailed information about custom job types, see the help topics about the job type.

Använd cmdleten för att hitta jobb typen för ett jobb Get-Job .To find the job type of a job, use the Get-Job cmdlet. Get-Job returnerar olika jobb objekt för olika typer av jobb.Get-Job returns different job objects for different types of jobs. Värdet för egenskapen PSJobTypeName för de jobb objekt som Get-Job returnerar anger jobb typen.The value of the PSJobTypeName property of the job objects that Get-Job returns indicates the job type.

I följande tabell visas de jobb typer som ingår i PowerShell.The following table lists the job types that come with PowerShell.

JobbtypJob Type BeskrivningDescription
BackgroundJobBackgroundJob Startade med Start-Job cmdleten.Started using the Start-Job cmdlet.
RemoteJobRemoteJob Startade med AsJob -parametern förStarted using the AsJob parameter of the
Invoke-Command kommandon.Invoke-Command cmdlet.
PSWorkflowJobPSWorkflowJob Startade med AsJob -parametern för ett arbets flöde.Started using the AsJob parameter of a workflow.
PSScheduledJobPSScheduledJob En instans av ett schemalagt jobb startades av en jobb utlösare.An instance of a scheduled job started by a job trigger.
CIMJobCIMJob Startade med AsJob -parametern för en cmdlet från enStarted using the AsJob parameter of a cmdlet from a
CDXLM-modul.CDXML module.
WMIJobWMIJob Startade med AsJob -parametern för en cmdlet från enStarted using the AsJob parameter of a cmdlet from a
WMI-modul.WMI module.
PSEventJobPSEventJob Skapad med Register-ObjectEvent och ange enCreated usingRegister-ObjectEvent and specifying an
åtgärd med Åtgärds parametern.action with the Action parameter.

Obs: innan du använder Get-Job cmdleten för att hämta jobb av en viss typ, kontrollerar du att modulen som lägger till jobb typen importeras till den aktuella sessionen.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. Annars Get-Job kommer inte jobb av den typen.Otherwise, Get-Job does not get jobs of that type.

ExempelExamples

Följande kommandon skapar ett lokalt bakgrunds jobb, ett fjärran slutet bakgrunds jobb, ett arbets flödes jobb och ett schemalagt jobb.The following commands create a local background job, a remote background job, a workflow job, and a scheduled job. Sedan använder den Get-Job cmdleten för att hämta jobben.Then, it uses the Get-Job cmdlet to get the jobs. Get-Job får inte det schemalagda jobbet, men alla startade instanser av det schemalagda jobbet hämtas.Get-Job does not get the scheduled job, but it gets any started instances of the scheduled job.

Starta ett bakgrunds jobb på den lokala datorn.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

Starta ett bakgrunds jobb som körs på en fjärrdator.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

Skapa ett schemalagt jobbCreate 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

Skapa ett arbets flöde.Create a workflow.

PS> workflow Test-Workflow {Get-Process}

Kör arbets flödet som ett jobb.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

Hämta jobben.Get the jobs. Get-JobKommandot kan inte utföra schemalagda jobb, men det hämtar instanser av det schemalagda jobbet som har startats.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

Använd cmdleten för att hämta schemalagda jobb Get-ScheduledJob .To get scheduled jobs, use the Get-ScheduledJob cmdlet.

PS> Get-ScheduledJob

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

Se ävenSee also