Start-Job
Démarre un travail en arrière-plan PowerShell.
Syntax
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>]
-LiteralPath <String>
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Start-Job
[-Name <String>]
[-Credential <PSCredential>]
[-FilePath] <String>
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Description
L’applet Start-Job
de commande démarre un travail en arrière-plan PowerShell sur l’ordinateur local.
Un travail en arrière-plan PowerShell exécute une commande sans interagir avec la session active. Quand vous démarrez un travail en arrière-plan, un objet de travail est immédiatement retourné, même si le travail prend plus de temps que prévu. Vous pouvez continuer à travailler dans la session sans interruption pendant l'exécution de la tâche.
L’objet de travail contient des informations utiles sur le travail, mais il ne contient pas les résultats du travail.
Une fois le travail terminé, utilisez l’applet Receive-Job
de commande pour obtenir les résultats du travail. Pour plus d’informations sur les tâches en arrière-plan, consultez about_Jobs.
Pour exécuter un travail en arrière-plan sur un ordinateur distant, utilisez le paramètre AsJob disponible sur de nombreuses applets de commande ou utilisez l’applet Invoke-Command
de commande pour exécuter une Start-Job
commande sur l’ordinateur distant. Pour plus d’informations, consultez about_Remote_Jobs.
À partir de PowerShell 3.0, Start-Job
peut démarrer des instances de types de travaux personnalisés, comme des travaux planifiés. Pour plus d’informations sur l’utilisation Start-Job
de travaux avec des types personnalisés, consultez les documents d’aide pour la fonctionnalité de type de travail.
À partir de PowerShell 6.0, vous pouvez démarrer des travaux à l’aide de l’opérateur ampersand (&
) en arrière-plan. La fonctionnalité de l’opérateur en arrière-plan est similaire à Start-Job
. Les deux méthodes permettant de démarrer un travail créent un objet de travail PSRemotingJob . Pour plus d’informations sur l’utilisation de l’ampersand (&
), consultez about_Operators.
Le répertoire de travail par défaut pour les travaux est codé en dur. La valeur par défaut de Windows est $HOME\Documents
et sur Linux ou macOS, la valeur par défaut est $HOME
. Le code de script s’exécutant dans le travail en arrière-plan doit gérer le répertoire de travail en fonction des besoins.
Notes
La création d’un travail en arrière-plan hors processus avec Start-Job
n’est pas prise en charge dans le scénario où PowerShell est hébergé dans d’autres applications, telles que powerShell Azure Functions.
Cela dépend Start-Job
de l’exécutable pwsh
sous pour $PSHOME
démarrer un travail en arrière-plan hors processus, mais lorsqu’une application héberge PowerShell, elle utilise directement les packages du Kit de développement logiciel (SDK) NuGet PowerShell et n’a pwsh
pas été livrée.
Le substitut dans ce scénario provient Start-ThreadJob
du module ThreadJob.
Exemples
Exemple 1 : Démarrer un travail en arrière-plan
Cet exemple montre comment démarrer un travail en arrière-plan qui s’exécute sur l’ordinateur local.
Start-Job -ScriptBlock { Get-Process -Name pwsh }
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost Get-Process -Name pwsh
Start-Job
utilise le paramètre ScriptBlock pour s’exécuter Get-Process
en tant que travail en arrière-plan. Le paramètre Name spécifie pour rechercher les processus PowerShell, pwsh
. Les informations sur le travail s’affichent et PowerShell retourne à une invite pendant que le travail s’exécute en arrière-plan.
Pour afficher la sortie du travail, utilisez l’applet de Receive-Job
commande . Par exemple : Receive-Job -Id 1
.
Exemple 2 : Utiliser l’opérateur en arrière-plan pour démarrer un travail en arrière-plan
Cet exemple utilise l’opérateur d’arrière-plan ampersand (&
) pour démarrer un travail en arrière-plan sur l’ordinateur local. Le travail obtient le même résultat que Start-Job
dans l’exemple 1.
Get-Process -Name pwsh &
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
5 Job5 BackgroundJob Running True localhost Microsoft.PowerShell.Man...
Get-Process
utilise le paramètre Name pour spécifier les processus PowerShell, pwsh
. L’ampersand (&
) exécute la commande en tant que travail en arrière-plan. Les informations sur le travail s’affichent et PowerShell retourne à une invite pendant que le travail s’exécute en arrière-plan.
Pour afficher la sortie du travail, utilisez l’applet de Receive-Job
commande . Par exemple : Receive-Job -Id 5
.
Exemple 3 : Démarrer un travail à l’aide de Invoke-Command
Cet exemple exécute un travail sur plusieurs ordinateurs. Le travail est stocké dans une variable et est exécuté à l’aide du nom de la variable sur la ligne de commande PowerShell.
$jobWRM = Invoke-Command -ComputerName (Get-Content -Path C:\Servers.txt) -ScriptBlock {
Get-Service -Name WinRM } -JobName WinRM -ThrottleLimit 16 -AsJob
Un travail qui utilise Invoke-Command
est créé et stocké dans la $jobWRM
variable. Invoke-Command
utilise le paramètre ComputerName pour spécifier les ordinateurs sur lesquels le travail s’exécute. Get-Content
obtient les noms de serveur à partir du C:\Servers.txt
fichier.
Le paramètre ScriptBlock spécifie une commande qui Get-Service
obtient le service WinRM . Le paramètre JobName spécifie un nom convivial pour le travail, WinRM. Le paramètre ThrottleLimit limite le nombre de commandes simultanées à 16. Le paramètre AsJob démarre un travail en arrière-plan qui exécute la commande sur les serveurs.
Exemple 4 : Obtenir des informations sur le travail
Cet exemple obtient des informations sur un travail et affiche les résultats d’un travail terminé qui a été exécuté sur l’ordinateur local.
$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
utilise le paramètre ScriptBlock pour exécuter une commande qui spécifie Get-WinEvent
d’obtenir le journal système . Le paramètre Credential spécifie un compte d’utilisateur de domaine autorisé à exécuter le travail sur l’ordinateur. L’objet de travail est stocké dans la $j
variable .
L’objet dans la $j
variable est envoyé vers le bas du pipeline à Select-Object
. Le paramètre Property spécifie un astérisque (*
) pour afficher toutes les propriétés de l’objet de travail.
Exemple 5 : Exécuter un script en tant que travail en arrière-plan
Dans cet exemple, un script sur l’ordinateur local est exécuté en tant que travail en arrière-plan.
Start-Job -FilePath C:\Scripts\Sample.ps1
Start-Job
utilise le paramètre FilePath pour spécifier un fichier de script stocké sur l’ordinateur local.
Exemple 6 : Obtenir un processus à l’aide d’un travail en arrière-plan
Cet exemple utilise un travail en arrière-plan pour obtenir un processus spécifié par son nom.
Start-Job -Name PShellJob -ScriptBlock { Get-Process -Name PowerShell }
Start-Job
utilise le paramètre Name pour spécifier un nom de travail convivial, PShellJob. Le paramètre ScriptBlock spécifie d’obtenir des Get-Process
processus portant le nom PowerShell.
Exemple 7 : Collecter et enregistrer des données à l’aide d’un travail en arrière-plan
Cet exemple démarre un travail qui collecte une grande quantité de données de carte, puis les enregistre dans un .tif
fichier.
Start-Job -Name GetMappingFiles -InitializationScript {Import-Module MapFunctions} -ScriptBlock {
Get-Map -Name * | Set-Content -Path D:\Maps.tif } -RunAs32
Start-Job
utilise le paramètre Name pour spécifier un nom de travail convivial, GetMappingFiles. Le paramètre InitializationScript exécute un bloc de script qui importe le module MapFunctions . Le paramètre ScriptBlock exécute Get-Map
et Set-Content
enregistre les données à l’emplacement spécifié par le paramètre Path . Le paramètre RunAs32 exécute le processus en tant que 32 bits, même sur un système d’exploitation 64 bits.
Exemple 8 : Passer une entrée à un travail en arrière-plan
Cet exemple utilise la $input
variable automatique pour traiter un objet d’entrée. Utilisez Receive-Job
pour afficher la sortie du travail.
Start-Job -ScriptBlock { Get-Content $input } -InputObject "C:\Servers.txt"
Receive-Job -Name Job45 -Keep
Server01
Server02
Server03
Server04
Start-Job
utilise le paramètre ScriptBlock pour s’exécuter Get-Content
avec la $input
variable automatique. La $input
variable obtient des objets à partir du paramètre InputObject . Receive-Job
utilise le paramètre Name pour spécifier le travail et génère les résultats. Le paramètre Keep enregistre la sortie du travail afin qu’elle puisse être affichée à nouveau pendant la session PowerShell.
Exemple 9 : Utiliser le paramètre ArgumentList pour spécifier un tableau
Cet exemple utilise le paramètre ArgumentList pour spécifier un tableau d’arguments. Le tableau est une liste de noms de processus séparés par des virgules.
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
L’applet Start-Job
de commande utilise le paramètre ScriptBlock pour exécuter une commande. Get-Process
utilise le paramètre Name pour spécifier la variable $args
automatique . Le paramètre ArgumentList transmet le tableau de noms de processus à $args
. Les noms de processus powershell, pwsh et bloc-notes sont des processus en cours d’exécution sur l’ordinateur local.
Pour afficher la sortie du travail, utilisez l’applet de Receive-Job
commande . Par exemple : Receive-Job -Id 1
.
Paramètres
-ArgumentList
Spécifie un tableau d’arguments, ou des valeurs de paramètre, pour le script spécifié par le paramètre FilePath ou une commande spécifiée avec le paramètre ScriptBlock .
Les arguments doivent être passés à ArgumentList en tant qu’argument de tableau à dimension unique. Par exemple, une liste séparée par des virgules. Pour plus d’informations sur le comportement d’ArgumentList, consultez about_Splatting.
Type: | Object[] |
Aliases: | Args |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Authentication
Spécifie le mécanisme utilisé pour authentifier les informations d’identification de l’utilisateur.
Les valeurs acceptables pour ce paramètre sont les suivantes :
- Default
- De base
- Credssp
- Digest
- Kerberos
- Negotiate
- NegotiateWithImplicitCredential
La valeur par défaut est Default.
L’authentification CredSSP est disponible uniquement dans Windows Vista, Windows Server 2008 et les versions ultérieures du système d’exploitation Windows.
Pour plus d’informations sur les valeurs de ce paramètre, consultez AuthenticationMechanism.
Attention
l'authentification CredSSP (Credential Security Support Provider), au cours de laquelle les informations d'identification de l'utilisateur sont passées à un ordinateur distant pour être authentifiées, est conçue pour les commandes qui nécessitent une authentification sur plusieurs ressources, telles que l'accès à un partage réseau distant. Ce mécanisme augmente le risque de sécurité lié à l'opération distante. Si l'ordinateur distant n'est pas fiable, les informations d'identification qui lui sont passées peuvent être utilisées pour contrôler la session réseau.
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
Spécifie un compte d’utilisateur qui a l’autorisation d’exécuter cette action. Si le paramètre Credential n’est pas spécifié, la commande utilise les informations d’identification de l’utilisateur actuel.
Tapez un nom d’utilisateur, tel que User01 ou Domain01\User01, ou entrez un objet PSCredential généré par l’applet de Get-Credential
commande. Si vous tapez un nom d’utilisateur, vous êtes invité à entrer le mot de passe.
Les informations d’identification sont stockées dans un objet PSCredential et le mot de passe est stocké en tant que SecureString.
Notes
Pour plus d’informations sur la protection des données SecureString , consultez Comment SecureString est-il sécurisé ?.
Type: | PSCredential |
Position: | Named |
Default value: | Current user |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DefinitionName
Spécifie le nom de définition du travail que cette applet de commande démarre. Utilisez ce paramètre pour démarrer les types de tâche personnalisés ayant un nom de définition, comme les tâches planifiées.
Lorsque vous utilisez Start-Job
pour démarrer une instance d’un travail planifié, le travail démarre immédiatement, indépendamment des déclencheurs de travail ou des options de travail. Le instance de travail résultant est un travail planifié, mais il n’est pas enregistré sur le disque, comme les travaux planifiés déclenchés. Vous ne pouvez pas utiliser le paramètre ArgumentList de pour fournir des Start-Job
valeurs pour les paramètres des scripts qui s’exécutent dans un travail planifié.
Ce paramètre a été introduit dans PowerShell 3.0.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DefinitionPath
Spécifie le chemin de la définition du travail que cette applet de commande démarre. Entrez le chemin d'accès à la définition. La concaténation des valeurs des paramètres DefinitionPath et DefinitionName est le chemin complet de la définition de travail. Utilisez ce paramètre pour démarrer les types de tâche personnalisés ayant un chemin d'accès de définition, comme les tâches planifiées.
Pour les travaux planifiés, la valeur du paramètre DefinitionPath est $home\AppData\Local\Windows\PowerShell\ScheduledJob
.
Ce paramètre a été introduit dans PowerShell 3.0.
Type: | String |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-FilePath
Spécifie un script local qui s’exécute en tant que Start-Job
travail en arrière-plan. Entrez le chemin d’accès et le nom de fichier du script ou utilisez le pipeline pour envoyer un chemin de script à Start-Job
. Le script doit se trouver sur l’ordinateur local ou dans un dossier auquel l’ordinateur local peut accéder.
Lorsque vous utilisez ce paramètre, PowerShell convertit le contenu du fichier de script spécifié en bloc de script et exécute le bloc de script en tant que travail en arrière-plan.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InitializationScript
Spécifie les commandes à exécuter avant le début de la tâche. Pour créer un bloc de script, placez les commandes dans des accolades ({}
).
Utilisez ce paramètre pour préparer la session dans laquelle la tâche s'exécute. Par exemple, vous pouvez l'utiliser pour ajouter des fonctions, des composants logiciels enfichables et des modules à la session.
Type: | ScriptBlock |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Spécifie l'entrée de la commande. Entrez une variable contenant les objets, ou tapez une commande ou une expression qui génère ces objets.
Dans la valeur du paramètre ScriptBlock , utilisez la $input
variable automatique pour représenter les objets d’entrée.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-LiteralPath
Spécifie un script local que cette applet de commande exécute en tant que travail en arrière-plan. Entrez le chemin d’accès d’un script sur l’ordinateur local.
Start-Job
utilise la valeur du paramètre LiteralPath exactement tel qu’il est tapé. Aucun caractère n'est interprété en tant que caractère générique. Si le chemin d’accès inclut des caractères d’échappement, mettez-le entre des guillemets simples. Les guillemets simples indiquent à PowerShell de ne pas interpréter de caractères comme des séquences d’échappement.
Type: | String |
Aliases: | PSPath, LP |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Name
Spécifie le nom convivial de la nouvelle tâche. Vous pouvez utiliser le nom pour identifier le travail à d’autres applets de commande de travail, telles que l’applet de Stop-Job
commande.
Le nom convivial par défaut est Job#
, où #
est un nombre ordinal incrémenté pour chaque travail.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-PSVersion
Spécifie une version. Start-Job
exécute le travail avec la version de PowerShell. Les valeurs acceptables pour ce paramètre sont : 2.0
et 3.0
.
Ce paramètre a été introduit dans PowerShell 3.0.
Type: | Version |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-RunAs32
Indique qu’exécute Start-Job
le travail dans un processus 32 bits. RunAs32 force le travail à s’exécuter dans un processus 32 bits, même sur un système d’exploitation 64 bits.
Sur les versions 64 bits de Windows 7 et Windows Server 2008 R2, lorsque la Start-Job
commande inclut le paramètre RunAs32 , vous ne pouvez pas utiliser le paramètre Credential pour spécifier les informations d’identification d’un autre utilisateur.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ScriptBlock
Spécifie les commandes à exécuter dans la tâche en arrière-plan. Pour créer un bloc de script, placez les commandes dans des accolades ({}
). Utilisez la $input
variable automatique pour accéder à la valeur du paramètre InputObject . Ce paramètre est obligatoire.
Type: | ScriptBlock |
Aliases: | Command |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Type
Spécifie le type personnalisé pour les travaux démarrés par Start-Job
. Entrez un nom de type de tâche personnalisé, par exemple, PSScheduledJob pour les tâches planifiées ou PSWorkflowJob pour les tâches de workflow. Ce paramètre n’est pas valide pour les travaux en arrière-plan standard.
Ce paramètre a été introduit dans PowerShell 3.0.
Type: | String |
Position: | 2 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Entrées
Vous pouvez utiliser le pipeline pour envoyer un objet avec la propriété Name au paramètre Name . Par exemple, vous pouvez pipeliner un objet FileInfo à partir de Get-ChildItem
Start-Job
vers .
Sorties
System.Management.Automation.PSRemotingJob
Start-Job
retourne un objet PSRemotingJob qui représente le travail qu’il a démarré.
Notes
Pour exécuter en arrière-plan, Start-Job
s’exécute dans sa propre session dans la session active. Lorsque vous utilisez l’applet de Invoke-Command
commande pour exécuter une Start-Job
commande dans une session sur un ordinateur distant, Start-Job
s’exécute dans une session de la session distante.