Avvia un processo in background di Windows PowerShell.

Sintassi

Start-Job [-ScriptBlock] <scriptblock> [[-InitializationScript] <scriptblock>] [-ArgumentList <Object[]>] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-Credential <PSCredential>] [-InputObject <psobject>] [-Name <string>] [-RunAs32] [<CommonParameters>]

Start-Job [[-FilePath] <string>] [[-InitializationScript] <scriptblock>] [-ArgumentList <Object[]>] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-Credential <PSCredential>] [-InputObject <psobject>] [-Name <string>] [-RunAs32] [<CommonParameters>]

Descrizione

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

In un processo in background di Windows PowerShell viene eseguito un comando "in background" senza interagire con la sessione corrente. Quando si avvia un processo in background, viene immediatamente restituito un oggetto processo, anche se il completamento del processo richiede un tempo prolungato. Durante l'esecuzione del processo, è possibile continuare a lavorare nella sessione senza interruzione.

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

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

Parametri

-ArgumentList <Object[]>

Specifica gli argomenti (valori del 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, il parametro ArgumentList deve essere l'ultimo parametro nel comando.

Obbligatorio?

false

Posizione?

named

Valore predefinito

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-Authentication <AuthenticationMechanism>

Specifica il meccanismo utilizzato per autenticare le credenziali dell'utente. I valori validi sono Default, Basic, Credssp, Digest, Kerberos, Negotiate e NegotiateWithImplicitCredential. Il valore predefinito è Default.

L'autenticazione CredSSP è disponibile unicamente in Windows Vista, Windows Server 2008 e nelle versioni successive di Windows.

Per informazioni sui valori di questo parametro, vedere la descrizione dell'enumerazione System.Management.Automation.Runspaces.AuthenticationMechanism in MSDN.

ATTENZIONE: l'autenticazione CredSSP (Credential Security Service Provider), che prevede il passaggio delle credenziali dell'utente a un computer remoto per l'autenticazione, è progettata 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 per la sicurezza dell'operazione remota. Se il computer remoto è compromesso, è possibile utilizzare le credenziali passate a tale computer per controllare la sessione di rete.

Obbligatorio?

false

Posizione?

named

Valore predefinito

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-Credential <PSCredential>

Specifica un account utente con autorizzazione per l'esecuzione di questa azione. Il valore predefinito è l'utente corrente.

Digitare un nome utente, ad esempio "Utente01" o "Dominio01\Utente01", o immettere un oggetto PSCredential, ad esempio uno ottenuto dal cmdlet Get-Credential.

Obbligatorio?

false

Posizione?

named

Valore predefinito

Current user

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-FilePath <string>

Esegue lo script locale specificato come processo in background. Immettere il percorso e il nome file dello script o reindirizzare un percorso di script a Start-Job. Lo script deve trovarsi nel computer locale o in una directory accessibile dal computer locale.

Quando si utilizza questo parametro, in Windows PowerShell il contenuto del file di script specificato viene convertito in un blocco di script, che viene successivamente eseguito come processo in background.

Obbligatorio?

false

Posizione?

1

Valore predefinito

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-InitializationScript <scriptblock>

Specifica i comandi da eseguire prima dell'inizio del processo. Racchiudere i comandi tra parentesi graffe ( { } ) per creare un blocco di script.

Utilizzare questo parametro per preparare la sessione in cui viene eseguito il processo. Ad esempio, è possibile utilizzarlo per aggiungere funzioni, snap-in e moduli alla sessione.

Obbligatorio?

false

Posizione?

2

Valore predefinito

nessuno

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-InputObject <psobject>

Specifica l'input del comando. Immettere una variabile che contiene gli oggetti oppure digitare un comando o un'espressione che consente di generare gli oggetti.

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

Obbligatorio?

false

Posizione?

named

Valore predefinito

Accettare input da pipeline?

true (ByValue)

Accettare caratteri jolly?

false

-Name <string>

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

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

Obbligatorio?

false

Posizione?

named

Valore predefinito

Job<number>

Accettare input da pipeline?

true (ByPropertyName)

Accettare caratteri jolly?

false

-RunAs32

Esegue il processo in un processo a 32 bit.

Utilizzare questo parametro per forzare il processo in un processo a 32 bit in un sistema operativo a 64 bit.

Obbligatorio?

false

Posizione?

named

Valore predefinito

False

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-ScriptBlock <scriptblock>

Specifica i comandi da eseguire nel processo in background. Racchiudere i comandi tra parentesi graffe ( { } ) per creare un blocco di script. Questo parametro è obbligatorio.

Obbligatorio?

true

Posizione?

1

Valore predefinito

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

<CommonParameters>

Questo cmdlet supporta i parametri comuni -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer e -OutVariable. Per ulteriori informazioni, vedere about_Commonparameters.

Input e output

Il tipo di input è il tipo degli oggetti che è possibile reindirizzare al cmdlet. Il tipo restituito è il tipo degli oggetti restituiti dal cmdlet.

Input

System.String

È possibile reindirizzare un percorso di file a Start-Job.

Output

System.Management.Automation.RemotingJob

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

Note

Per essere eseguito in background, Start-Job viene eseguito nella propria sessione all'interno della sessione corrente. Quando si utilizza il cmdlet Invoke-Command per eseguire un comando Start-Job in una sessione in un computer remoto, Start-Job viene eseguito in una sessione all'interno della sessione remota.

Esempio 1

C:\PS>start-job -scriptblock {get-process}

C:\PS> start-job -command "get-process"

Id    Name  State    HasMoreData  Location   Command
---   ----  -----    -----------  --------   -------
1     Job1  Running  True         localhost  get-process

Descrizione
-----------
Questo comando avvia un processo in background in cui viene eseguito un comando Get-Process. Il comando restituisce un oggetto processo con le informazioni sul processo. Il prompt dei comandi viene visualizzato immediatamente, in modo che sia possibile proseguire il lavoro nella sessione mentre il processo è in esecuzione in background.






Esempio 2

C:\PS>$jobWRM = invoke-command -computerName (get-content servers.txt) -scriptblock {get-service winrm} -jobname WinRM -throttlelimit 16 -AsJob

Descrizione
-----------
Questo comando utilizza il cmdlet Invoke-Command e il parametro AsJob per avviare un processo in background che esegue un comando "winrm get-service" in numerosi computer. Poiché il comando è in esecuzione in un server con traffico di rete sostanziale, il comando utilizza il parametro ThrottleLimit di Invoke-Command per limitare il numero di comandi simultanei a 16. 

Viene utilizzato il parametro ComputerName per specificare i computer in cui viene eseguito il processo. Il valore del parametro ComputerName è un comando Get-Content che ottiene il testo nel file Servers.txt, un file di nomi di computer in un dominio. 

Viene utilizzato il parametro ScriptBlock per specificare il comando e il parametro JobName per specificare un nome descrittivo per il processo.






Esempio 3

C:\PS>$j = start-job -scriptblock {get-eventlog -log system} -credential domain01\user01

C:\PS> $j | format-list -property *

HasMoreData   : True
StatusMessage :
Location      : localhost
Command       : get-eventlog -log system
JobStateInfo  : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : 2d9d775f-63e0-4d48-b4bc-c05d0e177f34
Id            : 1
Name          : Job1
ChildJobs     : {Job2}
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}
StateChanged  :

C:\PS> $j.JobStateInfo.state
Completed

C:\PS> $results = receive-job -job $j

C:\PS> $results
Index Time          Type        Source                EventID Message
----- ----          ----        ------                ------- -------
84366 Feb 18 19:20  Information Service Control M...     7036 The description...
84365 Feb 18 19:16  Information Service Control M...     7036 The description...
84364 Feb 18 19:10  Information Service Control M...     7036 The description...
...

Descrizione
-----------
Questi comandi gestiscono un processo in background che ottiene tutti gli eventi dal registro di sistema in Visualizzatore eventi. Il processo viene eseguito nel computer locale.

Il primo comando utilizza il cmdlet Start-Job per avviare il processo. Viene utilizzato il parametro Credential per specificare l'account utente di un utente che dispone dell'autorizzazione per eseguire il processo nel computer. Successivamente il comando salva l'oggetto processo restituito da Start-Job nella variabile $j.

A questo punto, è possibile riprendere le altre attività mentre il processo viene completato.

Il secondo comando utilizza un operatore pipeline (|) per passare l'oggetto processo in $j al cmdlet Format-List. Il comando Format-List utilizza il parametro Property con un valore indicante tutti gli elementi (*) per visualizzare tutte le proprietà dell'oggetto processo in un elenco.

Nel terzo comando viene visualizzato il valore della proprietà JobStateInfo. Tale proprietà contiene lo stato del processo.

Nel quarto comando viene utilizzato il cmdlet Receive-Job per ottenere i risultati del processo. I risultati vengono archiviati nella variabile $results.

Nel comando finale viene visualizzato il contenuto della variabile $results.






Esempio 4

C:\PS>start-job -filepath c:\scripts\sample.ps1

Descrizione
-----------
Questo comando esegue lo script Sample.ps1 come processo in background.






Esempio 5

C:\PS>start-job -name WinRm -scriptblock {get-process winrm}

Descrizione
-----------
Questo comando esegue un processo in background che ottiene il processo WinRM nel computer locale. Viene utilizzato il parametro ScriptBlock per specificare il comando che viene eseguito nel processo in background. Viene utilizzato il parametro Name per specificare un nome descrittivo per il nuovo processo.






Esempio 6

C:\PS>start-job -name GetMappingFiles -initializationScript {import-module MapFunctions} -scriptblock {Get-Map -name * | set-content D:\Maps.tif} -runAs32

Descrizione
-----------
Con questo comando viene avviato un processo che raccoglie una grande quantità di dati e li salva in un file con estensione tif. Nel comando viene utilizzato il parametro InitializationScript per eseguire un blocco di script che importa un modulo obbligatorio. Viene inoltre utilizzato il parametro RunAs32 per eseguire il processo in un processo a 32 bit anche se il computer dispone di un sistema operativo a 64 bit.






Vedere anche




Argomenti della Guida