Partager via


Start-Job

Démarre un travail en arrière-plan PowerShell.

Syntaxe

Start-Job
     [-Name <String>]
     [-ScriptBlock] <ScriptBlock>
     [-Credential <PSCredential>]
     [-Authentication <AuthenticationMechanism>]
     [[-InitializationScript] <ScriptBlock>]
     [-WorkingDirectory <String>]
     [-RunAs32]
     [-PSVersion <Version>]
     [-InputObject <PSObject>]
     [-ArgumentList <Object[]>]
     [<CommonParameters>]
Start-Job
     [-DefinitionName] <String>
     [[-DefinitionPath] <String>]
     [[-Type] <String>]
     [-WorkingDirectory <String>]
     [<CommonParameters>]
Start-Job
     [-Name <String>]
     [-Credential <PSCredential>]
     [-FilePath] <String>
     [-Authentication <AuthenticationMechanism>]
     [[-InitializationScript] <ScriptBlock>]
     [-WorkingDirectory <String>]
     [-RunAs32]
     [-PSVersion <Version>]
     [-InputObject <PSObject>]
     [-ArgumentList <Object[]>]
     [<CommonParameters>]
Start-Job
     [-Name <String>]
     [-Credential <PSCredential>]
     -LiteralPath <String>
     [-Authentication <AuthenticationMechanism>]
     [[-InitializationScript] <ScriptBlock>]
     [-WorkingDirectory <String>]
     [-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.

À compter de PowerShell 3.0, Start-Job vous pouvez démarrer des instances de types de travaux personnalisés, telles que des travaux planifiés. Pour plus d’informations sur la façon d’utiliser Start-Job pour démarrer des travaux avec des types personnalisés, consultez les documents d’aide pour la fonctionnalité de type de travail.

À compter de PowerShell 6.0, vous pouvez démarrer des travaux à l’aide de l’opérateur d’arrière-plan ampersand (&). La fonctionnalité de l’opérateur d’arrière-plan est similaire à Start-Job. Les deux méthodes pour démarrer un travail créent un objet de travail PSRemotingJob . Pour plus d’informations sur l’utilisation de l’ampersand (&), consultez about_Operators.

PowerShell 7 a introduit le paramètre WorkingDirectory qui spécifie le répertoire de travail initial d’un travail en arrière-plan. Si le paramètre n’est pas spécifié, Start-Job la valeur par défaut est le répertoire de travail actuel de l’appelant qui a démarré le travail.

Remarque

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 est dû à la conception, car Start-Job dépend de l’exécutable pwsh sous lequel $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 remplacement dans ce scénario provient Start-ThreadJob du module ThreadJob.

Exemples

Exemple 1 : Démarrer un travail en arrière-plan

Cet exemple démarre 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-Jobutilise 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 de travail sont affichées 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 Receive-Job de 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-Processutilise 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 de travail sont affichées 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 Receive-Job de 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 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 avec l’autorisation d’exécuter le travail sur l’ordinateur. L’objet de travail est stocké dans la $j variable.

L’objet de la $j variable est envoyé vers le bas du pipeline vers 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 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 avec 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 cartographiques, puis l’enregistre dans un .tif fichier.

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

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 s’exécute Get-Map et Set-Content enregistre les données à l’emplacement spécifié par le paramètre Path .

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. Permet Receive-Job d’afficher la sortie du travail.

Start-Job -ScriptBlock { Get-Content -Path $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 du paramètre InputObject . Receive-Jobutilise 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’il puisse être consulté à nouveau pendant la session PowerShell.

Exemple 9 : Définir le répertoire de travail d’un travail en arrière-plan

WorkingDirectory vous permet de spécifier un autre répertoire pour un travail à partir duquel vous pouvez exécuter des scripts ou ouvrir des fichiers. Dans cet exemple, le travail en arrière-plan spécifie un répertoire de travail différent de l’emplacement du répertoire actif.

PS C:\Test> Start-Job -WorkingDirectory C:\Test\Scripts { $PWD } | Receive-Job -AutoRemoveJob -Wait

Path
----
C:\Test\Scripts

Le répertoire de travail actuel de cet exemple est C:\Test. Start-Job utilise le paramètre WorkingDirectory pour spécifier le répertoire de travail du travail. Le paramètre ScriptBlock utilise $PWD pour afficher le répertoire de travail du travail. Receive-Job affiche la sortie du travail en arrière-plan. AutoRemoveJob supprime le travail et Attend supprime l’invite de commandes jusqu’à ce que tous les résultats soient reçus.

Exemple 10 : 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 séparée par des virgules de noms de processus.

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 $argsautomatique. 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 Receive-Job de commande. Par exemple : Receive-Job -Id 1.

Exemple 11 : Exécuter un travail dans Windows PowerShell 5.1

Cet exemple utilise le paramètre PSVersion avec la valeur 5.1 pour exécuter un travail dans une session Windows PowerShell 5.1.

$PSVersionTable.PSVersion

Major  Minor  Patch  PreReleaseLabel BuildLabel
-----  -----  -----  --------------- ----------
7      0      0      rc.1

$job = Start-Job -ScriptBlock { $PSVersionTable.PSVersion } -PSVersion 5.1
Receive-Job -Job $job

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      14393  3383

Paramètres

-ArgumentList

Spécifie un tableau d’arguments ou de 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[]
Alias:Args
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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 :

  • Par défaut
  • 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 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), dans laquelle les informations d’identification de l’utilisateur sont transmises à un ordinateur distant à authentifier, 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
Valeurs acceptées:Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos
Position:Named
Valeur par défaut:Default
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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 Get-Credential de 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.

Remarque

Pour plus d’informations sur la protection des données SecureString , consultez Comment secure is SecureString ?.

Type:PSCredential
Position:Named
Valeur par défaut:Current user
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-DefinitionName

Spécifie le nom de définition du travail démarré par cette applet de commande. 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, quel que soit le déclencheur de travail ou les options de travail. L’instance de travail résultante est une tâche planifiée, mais elle n’est pas enregistrée sur le disque, comme les travaux planifiés déclenchés. Vous ne pouvez pas utiliser le paramètre ArgumentList pour Start-Job fournir des 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
Valeur par défaut:None
Obligatoire:True
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-DefinitionPath

Spécifie le chemin d’accès de la définition du travail démarré par cette applet de commande. 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
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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 du fichier du script ou utilisez le pipeline pour envoyer un chemin d’accès 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
Valeur par défaut:None
Obligatoire:True
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:True
Accepter les caractères génériques:False

-LiteralPath

Spécifie un script local que cette applet de commande s’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 séquences d’échappement.

Type:String
Alias:PSPath, LP
Position:Named
Valeur par défaut:None
Obligatoire:True
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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 qui est incrémenté pour chaque travail.

Type:String
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:True
Accepter les caractères génériques:False

-PSVersion

Spécifie une version de PowerShell à utiliser pour exécuter le travail. Lorsque la valeur de PSVersion est 5.1 Le travail est exécuté dans une session Windows PowerShell 5.1. Pour toute autre valeur, le travail est exécuté à l’aide de la version actuelle de PowerShell.

Ce paramètre a été ajouté dans PowerShell 7 et fonctionne uniquement sur Windows.

Type:Version
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-RunAs32

À compter de PowerShell 7, le paramètre RunAs32 ne fonctionne pas sur PowerShell 64 bits (pwsh). Si RunAs32 est spécifié dans PowerShell 64 bits, Start-Job lève une erreur d’exception de fin. Pour démarrer un processus PowerShell 32 bits (pwsh) avec RunAs32, vous devez installer PowerShell 32 bits.

Dans PowerShell 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
Valeur par défaut:False
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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
Alias:Command
Position:0
Valeur par défaut:None
Obligatoire:True
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-WorkingDirectory

Spécifie le répertoire de travail initial du travail en arrière-plan. Si le paramètre n’est pas spécifié, le travail s’exécute à partir de l’emplacement par défaut. L’emplacement par défaut est le répertoire de travail actuel de l’appelant qui a démarré le travail.

Ce paramètre a été introduit dans PowerShell 7.

Type:String
Position:Named
Valeur par défaut:$HOME on Unix (macOS, Linux) and $HOME\Documents on Windows
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

Entrées

String

Vous pouvez diriger un objet avec la propriété Name vers le paramètre Name vers cette applet de commande. Par exemple, vous pouvez diriger un objet FileInfo à partir de Get-ChildItem.

Sorties

System.Management.Automation.PSRemotingJob

Cette applet de commande retourne un objet PSRemotingJob représentant le travail qu’il a démarré.

Notes

PowerShell inclut les alias suivants pour Start-Job:

  • Toutes les plateformes :
    • sajb

Pour s’exécuter en arrière-plan, Start-Job s’exécute dans sa propre session dans la session active. Lorsque vous utilisez l’applet Invoke-Command de commande pour exécuter une Start-Job commande dans une session sur un ordinateur distant, Start-Job exécute une session dans la session à distance.