Informazioni sui dettagli del processoAbout Job Details

Breve descrizioneShort description

Fornisce informazioni dettagliate sui processi in background in computer locali e remoti.Provides details about background jobs on local and remote computers.

Descrizione dettagliataDetailed description

In questo argomento viene illustrato il concetto di processo in background e vengono fornite informazioni tecniche sul funzionamento dei processi in background in PowerShell.This topic explains the concept of a background job and provides technical information about how background jobs work in PowerShell.

Questo argomento è un supplemento per gli argomenti about_Jobs, about_Thread_Jobse about_Remote_Jobs .This topic is a supplement to the about_Jobs, about_Thread_Jobs, and about_Remote_Jobs topics.

Informazioni sui processi in backgroundAbout background jobs

Un processo in background esegue un comando o un'espressione in modo asincrono.A background job runs a command or expression asynchronously. Potrebbe eseguire un cmdlet, una funzione, uno script o qualsiasi altra attività basata su comandi.It might run a cmdlet, a function, a script, or any other command-based task. È progettato per eseguire comandi che impiegano un lungo periodo di tempo, ma è possibile usarlo per eseguire qualsiasi comando in background.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.

Quando viene eseguito un comando sincrono, il prompt dei comandi di PowerShell viene eliminato fino al completamento del comando.When a synchronous command runs, the PowerShell command prompt is suppressed until the command is complete. Un processo in background, tuttavia, non impedisce il prompt di PowerShell.But a background job does not suppress the PowerShell prompt. Un comando per avviare un processo in background restituisce un oggetto processo.A command to start a background job returns a job object. Il prompt viene restituito immediatamente, in modo da poter lavorare su altre attività durante l'esecuzione del processo in background.The prompt returns immediately so you can work on other tasks while the background job runs.

Tuttavia, quando si avvia un processo in background, i risultati non vengono immediatamente ottenuti anche se il processo viene eseguito molto rapidamente.However, when you start a background job, you do not get the results immediately even if the job runs very quickly. L'oggetto processo restituito contiene informazioni utili sul processo, ma non contiene i risultati del processo.The job object that is returned contains useful information about the job, but it does not contain the job results. È necessario eseguire un comando separato per ottenere i risultati del processo.You must run a separate command to get the job results. È anche possibile eseguire comandi per arrestare il processo, attendere il completamento del processo ed eliminare il processo.You can also run commands to stop the job, to wait for the job to be completed, and to delete the job.

Per eseguire la temporizzazione di un processo in background indipendentemente da altri comandi, ogni processo in background viene eseguito nella propria sessione di PowerShell.To make the timing of a background job independent of other commands, each background job runs in its own PowerShell session. Tuttavia, può trattarsi di una connessione temporanea che viene creata solo per eseguire il processo e viene quindi distrutta o può essere una sessione PSSession persistente che è possibile usare per eseguire diversi processi o comandi correlati.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.

Uso dei cmdlet JobUsing the job cmdlets

Usare un Start-Job comando per avviare un processo in background in un computer locale.Use a Start-Job command to start a background job on a local computer. Start-Job Restituisce un oggetto processo.Start-Job returns a job object. È inoltre possibile ottenere oggetti che rappresentano i processi avviati nel computer locale utilizzando il Get-Job cmdlet.You can also get objects representing the jobs that were started on the local computer using the Get-Job cmdlet.

Per ottenere i risultati del processo, usare un Receive-Job comando.To get the job results, use a Receive-Job command. Se il processo non è completo, Receive-Job restituisce risultati parziali.If the job is not complete, Receive-Job returns partial results. È inoltre possibile utilizzare il Wait-Job cmdlet per disattivare il prompt dei comandi finché non vengono completati uno o tutti i processi avviati nella sessione.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.

Per arrestare un processo in background, utilizzare il Stop-Job cmdlet.To stop a background job, use the Stop-Job cmdlet. Per eliminare un processo, usare il Remove-Job cmdlet.To delete a job, use the Remove-Job cmdlet.

Per ulteriori informazioni sul funzionamento dei cmdlet, vedere l'argomento della Guida per ogni cmdlet e vedere about_Jobs.For more information about how the cmdlets work, see the Help topic for each cmdlet, and see about_Jobs.

Avvio dei processi in background in computer remotiStarting background jobs on remote computers

È possibile creare e gestire processi in background in un computer locale o remoto.You can create and manage background jobs on a local or remote computer. Per eseguire un processo in background in modalità remota, usare il parametro AsJob di un cmdlet Invoke-Command , ad esempio, oppure usare il Invoke-Command cmdlet per eseguire un Start-Job comando in modalità remota.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. È anche possibile avviare un processo in background in una sessione interattiva.You can also start a background job in an interactive session.

Per ulteriori informazioni sui processi in background remoti, vedere about_Remote_Jobs.For more information about remote background jobs, see about_Remote_Jobs.

Processi figlioChild jobs

Ogni processo in background è costituito da un processo padre e da uno o più processi figlio.Each background job consists of a parent job and one or more child jobs. Nei processi avviati utilizzando Start-Job o il parametro AsJob di Invoke-Command , il processo padre è un dirigente.In jobs started using Start-Job or the AsJob parameter of Invoke-Command, the parent job is an executive. Non esegue alcun comando né restituisce alcun risultato.It does not run any commands or return any results. I comandi vengono effettivamente eseguiti dai processi figlio.The commands are actually run by the child jobs. I processi avviati con altri cmdlet potrebbero funzionare in modo diverso.Jobs started using other cmdlets might work differently.

I processi figlio vengono archiviati nella proprietà ChildJobs dell'oggetto processo padre.The child jobs are stored in the ChildJobs property of the parent job object. La proprietà ChildJobs può contenere uno o più oggetti processo figlio.The ChildJobs property can contain one or many child job objects. Gli oggetti processo figlio hanno un nome , un ID e un InstanceID diversi dal processo padre, in modo che sia possibile gestire i processi padre e figlio singolarmente o come unità.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.

Per ottenere i processi padre e figlio di un processo, usare il parametro IncludeChildJobs del Get-Job cmdlet.To get the parent and child jobs of a job, use the IncludeChildJobs parameter of the Get-Job cmdlet. Il parametro IncludeChildJob è stato introdotto in 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

Per ottenere il processo padre e solo i processi figlio con un determinato valore di stato , usare il parametro ChildJobState del Get-Job 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. Il parametro ChildJobState è stato introdotto in 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

Per ottenere i processi figlio di un processo in tutte le versioni di PowerShell, usare la proprietà ChildJob del processo padre.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

È anche possibile usare un Get-Job comando nel processo figlio, come illustrato nel comando seguente: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

La configurazione del processo figlio dipende dal comando utilizzato per avviare il processo.The configuration of the child job depends on the command that you use to start the job.

  • Quando si usa Start-Job per avviare un processo in un computer locale, il processo è costituito da un processo padre esecutivo e da un processo figlio che esegue il comando.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.

  • Quando si usa il parametro AsJob di Invoke-Command per avviare un processo in uno o più computer, il processo è costituito da un processo padre esecutivo e da un processo figlio per ogni processo eseguito in ogni computer.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.

  • Quando si utilizza Invoke-Command per eseguire un Start-Job comando in uno o più computer remoti, il risultato è lo stesso di un comando locale eseguito in ogni computer remoto.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. Il comando restituisce un oggetto processo per ogni computer.The command returns a job object for each computer. L'oggetto processo è costituito da un processo padre esecutivo e da un processo figlio che esegue il comando.The job object consists of an executive parent job and one child job that runs the command.

Il processo padre rappresenta tutti i processi figlio.The parent job represents all of the child jobs. Quando si gestisce un processo padre, si gestiscono anche i processi figlio associati.When you manage a parent job, you also manage the associated child jobs. Se ad esempio si arresta un processo padre, vengono arrestati tutti i processi figlio.For example, if you stop a parent job, all child jobs are stopped. Se si ottengono i risultati di un processo padre, si ottengono i risultati di tutti i processi figlio.If you get the results of a parent job, you get the results of all child jobs.

Tuttavia, è anche possibile gestire i processi figlio singolarmente.However, you can also manage child jobs individually. Questa operazione è particolarmente utile quando si desidera analizzare un problema relativo a un processo o ottenere i risultati di uno solo di alcuni processi figlio avviati utilizzando il parametro AsJob di 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.

Il comando seguente usa il parametro AsJob di Invoke-Command per avviare i processi in background nel computer locale e in due computer remoti.The following command uses the AsJob parameter of Invoke-Command to start background jobs on the local computer and two remote computers. Il comando Salva il processo nella $j variabile.The command saves the job in the $j variable.

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

Quando si visualizzano le proprietà Name e ChildJob del processo in $j , viene indicato che il comando ha restituito un oggetto processo con tre processi figlio, uno per ogni computer.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}

Quando si Visualizza il processo padre, viene indicato che il processo non è riuscito.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...

Tuttavia, quando si esegue un Get-Job comando che ottiene i processi figlio, l'output mostra che solo un processo figlio non è riuscito.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

Per ottenere i risultati di tutti i processi figlio, utilizzare il Receive-Job cmdlet per ottenere i risultati del processo padre.To get the results of all child jobs, use the Receive-Job cmdlet to get the results of the parent job. È anche possibile ottenere i risultati di un determinato processo figlio, come illustrato nel comando seguente.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

La funzionalità processi figlio dei processi in background di PowerShell offre un maggiore controllo sui processi che vengono eseguiti.The child jobs feature of PowerShell background jobs gives you more control over the jobs that you run.

Tipi di processoJob types

PowerShell supporta diversi tipi di processi per diverse attività.PowerShell supports different types of jobs for different tasks. A partire da Windows PowerShell 3,0, gli sviluppatori possono scrivere "adattatori di origine dei processi" che aggiungono nuovi tipi di processo a PowerShell e includono gli adattatori di origine dei processi nei moduli.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. Quando si importa il modulo, è possibile usare il nuovo tipo di processo nella sessione.When you import the module, you can use the new job type in your session.

Ad esempio, il modulo PSScheduledJob aggiunge i processi pianificati e il modulo PSWorkflow aggiunge processi del flusso di lavoro.For example, the PSScheduledJob module adds scheduled jobs and the PSWorkflow module adds workflow jobs.

I tipi di processi personalizzati potrebbero differire significativamente dai processi in background di PowerShell standard.Custom jobs types might differ significantly from standard PowerShell background jobs. Ad esempio, i processi pianificati vengono salvati su disco; non esistono solo in una sessione specifica.For example, scheduled jobs are saved on disk; they do not exist only in a particular session. I processi del flusso di lavoro possono essere sospesi e ripresi.Workflow jobs can be suspended and resumed.

I cmdlet usati per gestire i processi personalizzati dipendono dal tipo di processo.The cmdlets that you use to manage custom jobs depend on the job type. Per alcuni, usare i cmdlet di processo standard, ad esempio Get-Job e Start-Job .For some, you use the standard job cmdlets, such as Get-Job and Start-Job. Altri sono dotati di cmdlet specializzati che gestiscono solo un particolare tipo di processo.Others come with specialized cmdlets that manage only a particular type of job. Per informazioni dettagliate sui tipi di processo personalizzati, vedere gli argomenti della Guida relativi al tipo di processo.For detailed information about custom job types, see the help topics about the job type.

Per trovare il tipo di processo di un processo, usare il Get-Job cmdlet.To find the job type of a job, use the Get-Job cmdlet. Get-Job restituisce oggetti processo diversi per diversi tipi di processi.Get-Job returns different job objects for different types of jobs. Il valore della proprietà PSJobTypeName degli oggetti processo Get-Job restituiti da indica il tipo di processo.The value of the PSJobTypeName property of the job objects that Get-Job returns indicates the job type.

La tabella seguente elenca i tipi di processo dotati di PowerShell.The following table lists the job types that come with PowerShell.

Tipo di processoJob Type DescrizioneDescription
BackgroundJobBackgroundJob Avviato utilizzando il Start-Job cmdlet.Started using the Start-Job cmdlet.
RemoteJobRemoteJob Avviato utilizzando il parametro AsJob del parametroStarted using the AsJob parameter of the
cmdlet Invoke-Command.Invoke-Command cmdlet.
PSWorkflowJobPSWorkflowJob Avviato utilizzando il parametro AsJob di un flusso di lavoro.Started using the AsJob parameter of a workflow.
PSScheduledJobPSScheduledJob Istanza di un processo pianificato avviato da un trigger di processo.An instance of a scheduled job started by a job trigger.
CIMJobCIMJob Avviato utilizzando il parametro AsJob di un cmdlet da unStarted using the AsJob parameter of a cmdlet from a
Modulo CDXML.CDXML module.
WMIJobWMIJob Avviato utilizzando il parametro AsJob di un cmdlet da unStarted using the AsJob parameter of a cmdlet from a
Modulo WMI.WMI module.
PSEventJobPSEventJob Creato usando Register-ObjectEvent e specificando unCreated usingRegister-ObjectEvent and specifying an
azione con il parametro Action .action with the Action parameter.

Nota: prima di usare il Get-Job cmdlet per ottenere i processi di un determinato tipo, verificare che il modulo che aggiunge il tipo di processo venga importato nella sessione corrente.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. In caso contrario, non Get-Job ottiene i processi di quel tipo.Otherwise, Get-Job does not get jobs of that type.

EsempiExamples

I comandi seguenti creano un processo in background locale, un processo in background remoto, un processo del flusso di lavoro e un processo pianificato.The following commands create a local background job, a remote background job, a workflow job, and a scheduled job. USA quindi il Get-Job cmdlet per ottenere i processi.Then, it uses the Get-Job cmdlet to get the jobs. Get-Job non ottiene il processo pianificato, ma ottiene tutte le istanze avviate del processo pianificato.Get-Job does not get the scheduled job, but it gets any started instances of the scheduled job.

Avviare un processo in background nel computer locale.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

Avviare un processo in background che viene eseguito in un computer remoto.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

Creare un processo pianificatoCreate 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

Creare un flusso di lavoro.Create a workflow.

PS> workflow Test-Workflow {Get-Process}

Eseguire il flusso di lavoro come un processo.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

Ottenere i processi.Get the jobs. Il Get-Job comando non ottiene i processi pianificati, ma ottiene le istanze del processo pianificato che vengono avviate.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

Per ottenere i processi pianificati, utilizzare il Get-ScheduledJob cmdlet.To get scheduled jobs, use the Get-ScheduledJob cmdlet.

PS> Get-ScheduledJob

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

Vedere ancheSee also