Condividi tramite


Start-Job

Avvia un processo in background di PowerShell.

Sintassi

Start-Job
     [-Name <String>]
     [-ScriptBlock] <ScriptBlock>
     [-Credential <PSCredential>]
     [-Authentication <AuthenticationMechanism>]
     [[-InitializationScript] <ScriptBlock>]
     [-RunAs32]
     [-PSVersion <Version>]
     [-InputObject <PSObject>]
     [-ArgumentList <Object[]>]
     [<CommonParameters>]
Start-Job
     [-DefinitionName] <String>
     [[-DefinitionPath] <String>]
     [[-Type] <String>]
     [<CommonParameters>]
Start-Job
     [-Name <String>]
     [-Credential <PSCredential>]
     [-FilePath] <String>
     [-Authentication <AuthenticationMechanism>]
     [[-InitializationScript] <ScriptBlock>]
     [-RunAs32]
     [-PSVersion <Version>]
     [-InputObject <PSObject>]
     [-ArgumentList <Object[]>]
     [<CommonParameters>]
Start-Job
     [-Name <String>]
     [-Credential <PSCredential>]
     -LiteralPath <String>
     [-Authentication <AuthenticationMechanism>]
     [[-InitializationScript] <ScriptBlock>]
     [-RunAs32]
     [-PSVersion <Version>]
     [-InputObject <PSObject>]
     [-ArgumentList <Object[]>]
     [<CommonParameters>]
Start-Job
     [-VMGuid] <Guid[]>
     [<CommonParameters>]
Start-Job
     [-VMGuid] <Guid[]>
     [<CommonParameters>]
Start-Job
     -VMName <String[]>
     [<CommonParameters>]
Start-Job
     -VMName <String[]>
     [<CommonParameters>]

Descrizione

Il Start-Job cmdlet avvia un processo in background di PowerShell nel computer locale.

Un processo in background di PowerShell esegue un comando senza interagire con la sessione corrente. Quando si avvia un processo in background, un oggetto processo restituisce immediatamente, anche se il processo richiede un tempo prolungato per terminare. È possibile continuare a lavorare nella sessione senza interruzioni durante l'esecuzione del processo.

L'oggetto processo contiene informazioni utili sul processo, ma non contiene i risultati del processo. Al termine del processo, usare il Receive-Job cmdlet per ottenere i risultati del processo. Per altre informazioni sui processi in background, vedere about_Jobs.

Per eseguire un processo in background in un computer remoto, usare il parametro AsJob disponibile in molti cmdlet o usare il Invoke-Command cmdlet per eseguire un Start-Job comando nel computer remoto. Per altre informazioni, vedere about_Remote_Jobs.

A partire da PowerShell 3.0, è possibile avviare istanze di tipi di processi personalizzati, Start-Job ad esempio processi pianificati. Per informazioni su come usare Start-Job per avviare processi con tipi personalizzati, vedere i documenti della Guida per la funzionalità del tipo di processo.

Esempio

Esempio 1: Avviare un processo in background

In questo esempio viene avviato un processo in background nel computer locale.

Start-Job -ScriptBlock {Get-Process}

Id  Name   PSJobTypeName   State     HasMoreData   Location    Command
--  ----   -------------   -----     -----------   --------    -------
1   Job1   BackgroundJob   Running   True          localhost   Get-Process

Start-Job usa il parametro ScriptBlock per l'esecuzione Get-Process come processo in background. Le informazioni sul processo vengono visualizzate e PowerShell restituisce un prompt durante l'esecuzione del processo in background.

Esempio 2: Avviare un processo usando Invoke-Command

In questo esempio viene eseguito un processo in più computer. Il processo viene archiviato in una variabile e viene eseguito usando il nome della variabile nella riga di comando di PowerShell.

$jobWRM = Invoke-Command -ComputerName (Get-Content -Path C:\Servers.txt) -ScriptBlock {
   Get-Service -Name WinRM } -JobName WinRM -ThrottleLimit 16 -AsJob

Un processo che usa Invoke-Command viene creato e archiviato nella $jobWRM variabile. Invoke-Command usa il parametro ComputerName per specificare i computer in cui viene eseguito il processo. Get-Content ottiene i nomi del C:\Servers.txt server dal file.

Il parametro ScriptBlock specifica un comando che Get-Service ottiene il servizio WinRM . Il parametro JobName specifica un nome descrittivo per il processo, WinRM. Il parametro ThrottleLimit limita il numero di comandi simultanei a 16. Il parametro AsJob avvia un processo in background che esegue il comando nei server.

Esempio 3: Ottenere informazioni sul processo

In questo esempio vengono fornite informazioni su un processo e vengono visualizzati i risultati di un processo completato eseguito nel computer locale.

$j = Start-Job -ScriptBlock { Get-WinEvent -Log System } -Credential Domain01\User01
$j | Select-Object -Property *

State         : Completed
HasMoreData   : True
StatusMessage :
Location      : localhost
Command       : Get-WinEvent -Log System
JobStateInfo  : Completed
Finished      : System.Threading.ManualResetEvent
InstanceId    : 27ce3fd9-40ed-488a-99e5-679cd91b9dd3
Id            : 18
Name          : Job18
ChildJobs     : {Job19}
PSBeginTime   : 8/8/2019 14:41:57
PSEndTime     : 8/8/2019 14:42:07
PSJobTypeName : BackgroundJob
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}
Information   : {}

Start-Job usa il parametro ScriptBlock per eseguire un comando che specifica Get-WinEvent per ottenere il log di sistema . Il parametro Credential specifica un account utente di dominio con autorizzazione per eseguire il processo nel computer. L'oggetto processo viene archiviato nella $j variabile.

L'oggetto $j nella variabile viene inviato alla pipeline in Select-Object. Il parametro Property specifica un asterisco (*) per visualizzare tutte le proprietà dell'oggetto processo.

Esempio 4: Eseguire uno script come processo in background

In questo esempio viene eseguito uno script nel computer locale come processo in background.

Start-Job -FilePath C:\Scripts\Sample.ps1

Start-Job usa il parametro FilePath per specificare un file di script archiviato nel computer locale.

Esempio 5: Ottenere un processo usando un processo in background

In questo esempio viene usato un processo in background per ottenere un processo specificato in base al nome.

Start-Job -Name PShellJob -ScriptBlock { Get-Process -Name PowerShell }

Start-Job usa il parametro Name per specificare un nome di processo descrittivo, PShellJob. Il parametro ScriptBlock specifica Get-Process per ottenere processi con il nome PowerShell.

Esempio 6: Raccogliere e salvare i dati usando un processo in background

In questo esempio viene avviato un processo che raccoglie una grande quantità di dati mappa e quindi lo salva in un .tif file.

Start-Job -Name GetMappingFiles -InitializationScript {Import-Module MapFunctions} -ScriptBlock {
   Get-Map -Name * | Set-Content -Path D:\Maps.tif } -RunAs32

Start-Job usa il parametro Name per specificare un nome di processo descrittivo, GetMappingFiles. Il parametro InitializationScript esegue un blocco di script che importa il modulo MapFunctions . Il parametro ScriptBlock viene eseguito Get-Map e Set-Content salva i dati nella posizione specificata dal parametro Path . Il parametro RunAs32 esegue il processo come 32 bit, anche in un sistema operativo a 64 bit.

Esempio 7: Passare l'input a un processo in background

In questo esempio viene usata la $input variabile automatica per elaborare un oggetto di input. Usare Receive-Job per visualizzare l'output del processo.

Start-Job -ScriptBlock { Get-Content $input } -InputObject "C:\Servers.txt"
Receive-Job -Name Job45 -Keep

Server01
Server02
Server03
Server04

Start-Job usa il parametro ScriptBlock per l'esecuzione Get-Content con la $input variabile automatica. La $input variabile ottiene oggetti dal parametro InputObject . Receive-Job usa il parametro Name per specificare il processo e restituisce i risultati. Il parametro Keep salva l'output del processo in modo che possa essere visualizzato di nuovo durante la sessione di PowerShell.

Parametri

-ArgumentList

Specifica una matrice di argomenti o valori di parametro per lo script specificato dal parametro FilePath .

Poiché tutti i valori che seguono il nome del parametro ArgumentList vengono interpretati come valori di ArgumentList, specificare questo parametro come ultimo parametro nel comando.

Type:Object[]
Aliases:Args
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Authentication

Specifica il meccanismo usato per autenticare le credenziali utente.

I valori accettabili per questo parametro sono i seguenti:

  • Default
  • Basic
  • Credssp
  • Digest
  • Kerberos
  • Negotiate
  • NegotiateWithImplicitCredential

Il valore predefinito è Default.

L'autenticazione CredSSP è disponibile solo in Windows Vista, Windows Server 2008 e versioni successive del sistema operativo Windows.

Per altre informazioni sui valori di questo parametro, vedere AuthenticationMechanism.

Attenzione

l'autenticazione CredSSP (Credential Security Support Provider), in cui le credenziali dell'utente vengono passate a un computer remoto per l'autenticazione, è progettata per i comandi che richiedono l'autenticazione in più di una risorsa, come nel caso dell'accesso a una condivisione di rete remota. Questo meccanismo aumenta il rischio per la sicurezza dell'operazione remota. Se infatti il computer remoto viene compromesso, le credenziali che gli vengono passate possono essere usate per controllare la sessione di rete.

Type:AuthenticationMechanism
Accepted values:Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos
Position:Named
Default value:Default
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Credential

Specifica un account utente che dispone delle autorizzazioni per eseguire questa azione. Se il parametro Credential non è specificato, il comando usa le credenziali dell'utente corrente.

Digitare un nome utente, ad esempio User01 o Domain01\User01 oppure immettere un oggetto PSCredential, ad esempio uno dal Get-Credential cmdlet.

Type:PSCredential
Position:Named
Default value:Current user
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DefinitionName

Specifica il nome della definizione del processo avviato da questo cmdlet. Usare questo parametro per avviare tipi di processo personalizzati che hanno un nome di definizione, come i processi pianificati.

Quando si usa Start-Job per avviare un'istanza di un processo pianificato, il processo viene avviato immediatamente, indipendentemente dai trigger di processo o dalle opzioni del processo. L'istanza del processo risultante è un processo pianificato, ma non viene salvato su disco come i processi pianificati attivati. Non è possibile usare il parametro ArgumentList di Start-Job per fornire valori per i parametri degli script eseguiti in un processo pianificato. Per ulteriori informazioni, vedere about_Scheduled_Jobs.

Questo parametro è stato introdotto in PowerShell 3.0.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-DefinitionPath

Specifica il percorso della definizione per il processo avviato da questo cmdlet. Immettere il percorso della definizione. La concatenazione dei valori dei parametri DefinitionPath e DefinitionName è il percorso completo della definizione del processo. Usare questo parametro per avviare tipi di processo personalizzati che hanno un percorso di definizione, come i processi pianificati.

Per i processi pianificati, il valore del parametro DefinitionPath è $home\AppData\Local\Windows\PowerShell\ScheduledJob.

Questo parametro è stato introdotto in PowerShell 3.0.

Type:String
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FilePath

Specifica uno script locale eseguito Start-Job come processo in background. Immettere il percorso e il nome file dello script oppure usare la pipeline per inviare un percorso di script a Start-Job. Lo script deve trovarsi nel computer locale o in una cartella a cui può accedere il computer locale.

Quando si usa questo parametro, PowerShell converte il contenuto del file di script specificato in un blocco di script ed esegue il blocco di script come processo in background.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-InitializationScript

Specifica i comandi da eseguire prima dell'avvio del processo. Per creare un blocco di script, racchiudere i comandi tra parentesi graffe ({}).

Usare questo parametro per preparare la sessione in cui deve essere eseguito il processo. Ad esempio, è possibile usarlo per aggiungere funzioni, snap-in e moduli alla sessione.

Type:ScriptBlock
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

Specifica l'input del comando. Immettere una variabile che contiene gli oggetti o digitare un comando o un'espressione che genera gli oggetti.

Nel valore del parametro ScriptBlock usare la $input variabile automatica per rappresentare gli oggetti di input.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

Specifica uno script locale eseguito da questo cmdlet come processo in background. Immettere il percorso di uno script nel computer locale.

Start-Job usa il valore del parametro LiteralPath esattamente come viene digitato. Nessun carattere viene interpretato come carattere jolly. Se il percorso include caratteri di escape, racchiuderlo tra virgolette singole. Le virgolette singole indicano a PowerShell di non interpretare alcun carattere come sequenze di escape.

Type:String
Aliases:PSPath
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Name

Specifica un nome descrittivo per il nuovo processo. È possibile usare il nome per identificare il processo in altri cmdlet del processo, ad esempio il Stop-Job cmdlet .

Il nome descrittivo predefinito è Job#, dove # è un numero ordinale incrementato per ogni processo.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-PSVersion

Specifica una versione. Start-Job esegue il processo con la versione di PowerShell. I valori accettabili per questo parametro sono: 2.0 e 3.0.

Questo parametro è stato introdotto in PowerShell 3.0.

Type:Version
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RunAs32

Indica che Start-Job esegue il processo in un processo a 32 bit. RunAs32 forza l'esecuzione del processo in un processo a 32 bit, anche in un sistema operativo a 64 bit.

Nelle versioni a 64 bit di Windows 7 e Windows Server 2008 R2, quando il comando include il Start-Job parametro RunAs32 , non è possibile usare il parametro Credential per specificare le credenziali di un altro utente.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ScriptBlock

Specifica i comandi da eseguire nel processo in background. Per creare un blocco di script, racchiudere i comandi tra parentesi graffe ({}). Usare la $input variabile automatica per accedere al valore del parametro InputObject . Questo parametro è obbligatorio.

Type:ScriptBlock
Aliases:Command
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Type

Specifica il tipo personalizzato per i processi avviati da Start-Job. Immettere un nome di tipo di processo personalizzato, ad esempio PSScheduledJob per i processi pianificati o PSWorkflowJob per i processi dei flussi di lavoro. Questo parametro non è valido per i processi in background standard.

Questo parametro è stato introdotto in PowerShell 3.0.

Type:String
Position:2
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Input

String

È possibile usare la pipeline per inviare un oggetto con la proprietà Name al parametro Name . Ad esempio, è possibile pipelinere un oggetto FileInfo da Get-ChildItem a Start-Job.

Output

System.Management.Automation.PSRemotingJob

Start-Job restituisce un oggetto PSRemotingJob che rappresenta il processo avviato.

Note

Per l'esecuzione in background, Start-Job viene eseguita nella propria sessione nella sessione corrente. Quando si usa il Invoke-Command cmdlet per eseguire un Start-Job comando in una sessione in un computer remoto, Start-Job viene eseguito in una sessione nella sessione remota.