Condividi tramite


Start-Job

Avvia un processo in background di PowerShell.

Sintassi

ComputerName (Impostazione predefinita)

Start-Job
    [-ScriptBlock] <ScriptBlock>
    [[-InitializationScript] <ScriptBlock>]
    [-Name <String>]
    [-Credential <PSCredential>]
    [-Authentication <AuthenticationMechanism>]
    [-RunAs32]
    [-PSVersion <Version>]
    [-InputObject <PSObject>]
    [-ArgumentList <Object[]>]
    [<CommonParameters>]

DefinitionName

Start-Job
    [-DefinitionName] <String>
    [[-DefinitionPath] <String>]
    [[-Type] <String>]
    [<CommonParameters>]

FilePathComputerName

Start-Job
    [-FilePath] <String>
    [[-InitializationScript] <ScriptBlock>]
    [-Name <String>]
    [-Credential <PSCredential>]
    [-Authentication <AuthenticationMechanism>]
    [-RunAs32]
    [-PSVersion <Version>]
    [-InputObject <PSObject>]
    [-ArgumentList <Object[]>]
    [<CommonParameters>]

LiteralFilePathComputerName

Start-Job
    [[-InitializationScript] <ScriptBlock>]
    -LiteralPath <String>
    [-Name <String>]
    [-Credential <PSCredential>]
    [-Authentication <AuthenticationMechanism>]
    [-RunAs32]
    [-PSVersion <Version>]
    [-InputObject <PSObject>]
    [-ArgumentList <Object[]>]
    [<CommonParameters>]

Descrizione

Il cmdlet Start-Job 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 di processo viene restituito immediatamente, anche se il processo richiede un tempo prolungato per il completamento. Puoi continuare a lavorare nella sessione senza interruzioni mentre il processo è in esecuzione.

L'oggetto processo contiene informazioni utili sul processo, ma non contiene i risultati del processo. Al termine del processo, usare il cmdlet Receive-Job 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 oppure usare il cmdlet Invoke-Command per eseguire un comando Start-Job nel computer remoto. Per altre informazioni, vedere about_Remote_Jobs.

A partire da PowerShell 3.0, Start-Job può avviare istanze di tipi di processi personalizzati, ad esempio processi pianificati. Per informazioni su come usare Start-Job per avviare attività con tipi personalizzati, vedere i documenti della Guida per la funzionalità relativa ai tipi di attività.

La directory di lavoro predefinita per i processi è hardcoded. Il valore predefinito di Windows è $HOME\Documents e in Linux o macOS il valore predefinito è $HOME. Il codice script in esecuzione nel processo in background deve gestire la directory di lavoro in base alle esigenze.

Esempio

Esempio 1: Avviare un lavoro in background

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

Start-Job -ScriptBlock { Get-Process -Name powershell }
Id  Name   PSJobTypeName   State     HasMoreData   Location    Command
--  ----   -------------   -----     -----------   --------    -------
1   Job1   BackgroundJob   Running   True          localhost   Get-Process -Name powershell

Start-Job usa il parametro ScriptBlock per eseguire Get-Process come processo in background. Il parametro Name specifica di trovare i processi PowerShell powershell. Le informazioni sul processo vengono visualizzate e PowerShell torna a una richiesta mentre il processo viene eseguito in background.

Per visualizzare l'output del processo, usare il cmdlet Receive-Job. Ad esempio: Receive-Job -Id 1.

Esempio 2: Avviare un processo usando Invoke-Command

Questo esempio esegue un'operazione su 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

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

Il parametro ScriptBlock specifica un comando che Get-Service ottiene il servizio WinRM. Il parametro JobName specifica un nome amichevole 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 recuperate 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 Credenziale specifica un account utente di dominio autorizzato a eseguire l'attività sul computer. L'oggetto lavoro viene memorizzato nella variabile $j.

L'oggetto nella variabile $j viene inviato nella pipeline al Select-Object. Il parametro Proprietà è rappresentato da un asterisco (*) per visualizzare tutte le proprietà dell'oggetto di lavoro.

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 utilizzata un'attività 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 Nome per specificare un nome di processo amichevole, PShellJob. Il parametro ScriptBlock consente di specificare 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 della mappa e quindi lo salva in un file di .tif.

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

Start-Job usa il parametro Name per specificare un nome amichevole per il processo, 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 utilizzata la variabile automatica $input per elaborare un oggetto di input. Usare Receive-Job per visualizzare l'output del lavoro.

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

Start-Job usa il parametro ScriptBlock per eseguire Get-Content con la variabile automatica $input. La variabile $input ottiene oggetti dal parametro InputObject. Receive-Job usa il parametro nome 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.

Esempio 8: Usare il parametro ArgumentList per specificare una matrice

In questo esempio viene utilizzato il parametro ArgumentList per specificare una matrice di argomenti. La matrice è un elenco delimitato da virgole di nomi di processo.

Start-Job -ScriptBlock { Get-Process -Name $args } -ArgumentList powershell, pwsh, notepad
Id     Name      PSJobTypeName   State       HasMoreData     Location     Command
--     ----      -------------   -----       -----------     --------     -------
1      Job1      BackgroundJob   Running     True            localhost    Get-Process -Name $args

Il cmdlet Start-Job usa il parametro ScriptBlock per eseguire un comando. Get-Process usa il parametro Name per specificare la variabile automatica $args. Il parametro ArgumentList passa la matrice di nomi di processo a $args. I nomi dei processi powershell, pwsh e Blocco note sono processi in esecuzione nel computer locale.

Per visualizzare l'output del processo, usare il cmdlet Receive-Job. Ad esempio: Receive-Job -Id 1.

Parametri

-ArgumentList

Specifica una matrice di argomenti o valori di parametro per lo script specificato dal parametro FilePath o un comando specificato con il parametro ScriptBlock.

Gli argomenti devono essere passati a ArgumentList come argomento matrice a dimensione singola. Ad esempio, un elenco delimitato da virgole. Per altre informazioni sul comportamento di ArgumentList, vedere about_Splatting.

Proprietà dei parametri

Tipo:

Object[]

Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False
Alias:Argomenti

Set di parametri

ComputerName
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False
LiteralFilePathComputerName
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False
FilePathComputerName
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

-Authentication

Specifica il meccanismo utilizzato per autenticare le credenziali utente.

I valori accettabili per questo parametro sono i seguenti:

  • Predefinito
  • Fondamentale
  • Credssp
  • Sommario
  • Kerberos
  • Negoziare
  • 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 da autenticare, è progettato per i comandi che richiedono l'autenticazione su più di una risorsa, ad esempio l'accesso a una condivisione di rete remota. Questo meccanismo aumenta il rischio di sicurezza dell'operazione remota. Se il computer remoto viene compromesso, è possibile usare le credenziali passate per controllare la sessione di rete.

Proprietà dei parametri

Tipo:AuthenticationMechanism
Valore predefinito:Default
Valori accettati:Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

ComputerName
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False
LiteralFilePathComputerName
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False
FilePathComputerName
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

-Credential

Specifica un account utente autorizzato a 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\User01oppure immettere un oggetto PSCredential generato dal cmdlet Get-Credential. Se si digita un nome utente, viene richiesto di immettere la password.

Le credenziali vengono archiviate in un oggetto PSCredential e la password viene archiviata come SecureString.

Annotazioni

Per ulteriori informazioni sulla protezione dei dati di SecureString, vedere Quanto è sicuro SecureString?.

Proprietà dei parametri

Tipo:PSCredential
Valore predefinito:Current user
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

ComputerName
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False
LiteralFilePathComputerName
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False
FilePathComputerName
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

-DefinitionName

Specifica il nome della definizione del processo avviato da questo cmdlet. Usare questo parametro per avviare tipi di processo personalizzati con un nome di definizione, ad esempio 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 altre informazioni, vedere about_Scheduled_Jobs.

Questo parametro è stato introdotto in PowerShell 3.0.

Proprietà dei parametri

Tipo:String
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

DefinitionName
Posizione:0
Obbligatorio:True
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

-DefinitionPath

Specifica il percorso della definizione per il processo avviato da questo cmdlet. Immettere il percorso di 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 con un percorso di definizione, ad esempio 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.

Proprietà dei parametri

Tipo:String
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

DefinitionName
Posizione:1
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

-FilePath

Specifica uno script locale che Start-Job esegue 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 il computer locale può accedere.

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.

Proprietà dei parametri

Tipo:String
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

FilePathComputerName
Posizione:0
Obbligatorio:True
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

-InitializationScript

Specifica i comandi eseguiti 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 viene eseguito il processo. Ad esempio, è possibile usarlo per aggiungere funzioni, snap-in e moduli alla sessione.

Proprietà dei parametri

Tipo:ScriptBlock
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

ComputerName
Posizione:1
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False
LiteralFilePathComputerName
Posizione:1
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False
FilePathComputerName
Posizione:1
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

-InputObject

Specifica l'input per il comando. Immettere una variabile contenente gli oggetti oppure digitare un comando o un'espressione che genera gli oggetti .

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

Proprietà dei parametri

Tipo:PSObject
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

ComputerName
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:True
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False
LiteralFilePathComputerName
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:True
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False
FilePathComputerName
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:True
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti: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 è interpretato come un carattere jolly. Se il percorso include caratteri di escape, racchiudilo tra virgolette singole. Le virgolette singole indicano a PowerShell di non interpretare alcun carattere come sequenze di escape.

Proprietà dei parametri

Tipo:String
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False
Alias:PSPath

Set di parametri

LiteralFilePathComputerName
Posizione:Named
Obbligatorio:True
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

-Name

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

Il nome amichevole predefinito è Job#, dove # è un numero ordinale incrementato per ogni attività.

Proprietà dei parametri

Tipo:String
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

ComputerName
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:True
Valore dagli argomenti rimanenti:False
LiteralFilePathComputerName
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:True
Valore dagli argomenti rimanenti:False
FilePathComputerName
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:True
Valore dagli argomenti rimanenti: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.

Proprietà dei parametri

Tipo:Version
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

ComputerName
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False
LiteralFilePathComputerName
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False
FilePathComputerName
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti: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 Start-Job include il parametro RunAs32, non è possibile usare il parametro credenziali per specificare le credenziali di un altro utente.

Proprietà dei parametri

Tipo:SwitchParameter
Valore predefinito:False
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

ComputerName
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False
LiteralFilePathComputerName
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False
FilePathComputerName
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti: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 variabile automatica $input per accedere al valore del parametro InputObject. Questo parametro è obbligatorio.

Proprietà dei parametri

Tipo:ScriptBlock
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False
Alias:Comando

Set di parametri

ComputerName
Posizione:0
Obbligatorio:True
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

-Type

Specifica il tipo personalizzato per le attività avviate 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.

Proprietà dei parametri

Tipo:String
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

DefinitionName
Posizione:2
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

CommonParameters

Questo cmdlet supporta i parametri comuni: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Per altre informazioni, vedi about_CommonParameters.

Input

String

È possibile inviare tramite pipe un oggetto con la proprietà Name al parametro Name di questo cmdlet. Ad esempio, è possibile inviare tramite pipe un oggetto fileInfo da Get-ChildItem.

Output

System.Management.Automation.PSRemotingJob

Questo cmdlet restituisce un oggetto PSRemotingJob che rappresenta il processo avviato.

Note

Windows PowerShell include gli alias seguenti per Start-Job:

  • sajb

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