RUBRIQUE about_Remote_Jobs DESCRIPTION COURTE Décrit comment exécuter des tâches en arrière-plan sur les ordinateurs distants. DESCRIPTION DÉTAILLÉE Une tâche en arrière-plan est une commande qui s'exécute de façon asynchrone sans interagir avec la session active. L'invite de commandes se réaffiche immédiatement et vous pouvez continuer à utiliser la session pendant que la tâche s'exécute. Par défaut, les tâches en arrière-plan s'exécutent sur l'ordinateur local. Toutefois, vous pouvez utiliser plusieurs procédures différentes pour les exécuter sur les ordinateurs distants. Cette rubrique explique comment exécuter une tâche en arrière-plan sur un ordinateur distant. Pour plus d'informations sur l'exécution des tâches en arrière-plan sur un ordinateur local, consultez about_Jobs. Pour plus d'informations sur les tâches en arrière-plan, consultez about_Job_Details. TÂCHES EN ARRIÈRE-PLAN DISTANTES Vous pouvez exécuter des tâches en arrière-plan sur les ordinateurs distants à l'aide de trois méthodes différentes. -- Démarrer une session interactive avec un ordinateur distant, puis démarrer une tâche dans la session interactive. Les procédures sont les mêmes que pour l'exécution d'une tâche locale, même si toutes les actions sont effectuées sur l'ordinateur distant. -- Exécuter une tâche en arrière-plan sur un ordinateur distant qui retourne ses résultats à l'ordinateur local. Utilisez cette méthode lorsque vous souhaitez rassembler les résultats des tâches en arrière-plan et les gérer dans un emplacement central sur l'ordinateur local. -- Exécuter une tâche en arrière-plan sur un ordinateur distant qui gère ses résultats sur l'ordinateur distant. Utilisez cette méthode lorsque les données de la tâche sont gérées de façon plus sécurisée sur l'ordinateur d'origine. DÉMARRER UNE TÂCHE EN ARRIÈRE-PLAN DANS UNE SESSION INTERACTIVE Vous pouvez démarrer une session interactive avec un ordinateur distant, puis démarrer une tâche en arrière-plan pendant la session interactive. Pour plus d'informations sur les sessions interactives, consultez about_Remote et Enter-PSSession. La procédure permettant de démarrer une tâche en arrière-plan dans une session interactive est presque identique à celle du démarrage d'une tâche en arrière-plan sur l'ordinateur local. Toutefois, toutes les opérations se produisent sur l'ordinateur distant, et non sur l'ordinateur local. ÉTAPE 1 : ENTER-PSSESSION Utilisez l'applet de commande Enter-PSSession pour démarrer une session interactive avec un ordinateur distant. Vous pouvez utiliser le paramètre ComputerName de l'applet de commande Enter-PSSession pour établir une connexion temporaire pour la session interactive. Vous pouvez également utiliser le paramètre Session pour exécuter la session interactive dans une session Windows PowerShell (PSSession). La commande suivante démarre une session interactive sur l'ordinateur Server01. C:\PS> Enter-PSSession -computername Server01 L'invite de commandes change pour indiquer que vous êtes maintenant connecté à l'ordinateur Server01. Server01\C:> ÉTAPE 2 : START-JOB Pour démarrer une tâche en arrière-plan dans la session, utilisez l'applet de commande Start-Job. La commande suivante exécute une tâche en arrière-plan qui obtient les événements dans le journal des événements Windows PowerShell sur l'ordinateur Server01. L'applet de commande Start-Job retourne un objet qui représente la tâche. Cette commande enregistre l'objet de traitement dans la variable $job. Server01\C:> $job = start-job -scriptblock {get-eventlog "Windows PowerShell"} Pendant l'exécution de la tâche, vous pouvez utiliser la session interactive pour exécuter d'autres commandes, notamment d'autres tâches en arrière-plan. Toutefois, la session interactive doit rester ouverte jusqu'à la fin de la tâche. Si vous mettez fin à la session, la tâche est interrompue et les résultats sont perdus. ÉTAPE 3 : GET-JOB Pour déterminer si la tâche est terminée, affichez la valeur de la variable $job ou utilisez l'applet de commande Get-Job pour obtenir la tâche. La commande suivante utilise l'applet de commande Get-Job pour afficher la tâche. Server01\C:> get-job $job SessionId Name State HasMoreData Location Command --------- ---- ----- ----------- -------- ------- 1 Job1 Complete True localhost get-eventlog "Windows PowerShell" La sortie Get-Job indique que la tâche est exécutée sur l'ordinateur " localhost ", car elle a été démarrée et est exécutée sur le même ordinateur (dans ce cas, Server01). ÉTAPE 4 : RECEIVE-JOB Pour obtenir les résultats de la tâche, utilisez l'applet de commande Receive-Job. Vous pouvez afficher les résultats dans la session interactive ou les enregistrer dans un fichier sur l'ordinateur distant. La commande suivante obtient les résultats de la tâche dans la variable $job. La commande utilise l'opérateur de redirection (>) pour enregistrer les résultats de la tâche dans le fichier PsLog.txt sur l'ordinateur Server01. Server01\C:> receive-job $job > c:\logs\PsLog.txt ÉTAPE 5 : EXIT-PSSESSION Pour mettre fin à la session interactive, utilisez l'applet de commande Exit-PSSession. L'invite de commandes change pour indiquer que vous êtes de retour dans la session d'origine sur l'ordinateur local. Server01\C:> Exit-PSSession C:\PS> ÉTAPE 6 : INVOKE-COMMAND: GET-CONTENT Pour afficher à tout moment le contenu du fichier PsLog.txt sur l'ordinateur Server01, démarrez une autre session interactive ou exécutez une commande distante. Ce type de commande convient le mieux dans une session PSSession (connexion permanente) si vous souhaitez utiliser plusieurs commandes pour rechercher et gérer les données dans le fichier PsLog.txt. Pour plus d'informations sur les sessions PSSession, consultez about_PSSessions. Les commandes suivantes utilisent l'applet de commande New-PSSession pour créer une session PSSession connectée à l'ordinateur Server01 et l'applet de commande Invoke-Command pour exécuter une commande Get-Content dans la session PSSession pour afficher le contenu du fichier. C:\PS> $s = new-pssession -computername Server01 C:\PS> invoke-command -session $s -scriptblock {get-content c:\logs\pslog.txt} DÉMARRER UNE TÂCHE DISTANTE QUI RETOURNE LES RÉSULTATS À L'ORDINATEUR LOCAL (ASJOB) Pour démarrer une tâche en arrière-plan sur un ordinateur distant qui retourne les résultats de la commande à l'ordinateur local, utilisez le paramètre AsJob d'une applet de commande, par exemple Invoke-Command. Lorsque vous utilisez le paramètre AsJob, l'objet de traitement est en fait créé sur l'ordinateur local, bien que la tâche s'exécute sur l'ordinateur distant. Lorsque la tâche est terminée, les résultats sont retournés à l'ordinateur local. Vous pouvez utiliser les applets de commande qui contiennent le nom Job (applets de commande Job) pour gérer n'importe quelle tâche créée par une applet de commande. La plupart des applets de commande avec des paramètres AsJob n'utilisant pas la communication à distance Windows PowerShell, vous pouvez les utiliser même sur les ordinateurs qui ne sont pas configurés pour la communication à distance et ne répondent pas aux conditions de la communication à distance. ÉTAPE 1 : INVOKE-COMMAND -ASJOB La commande suivante utilise le paramètre AsJob de l'applet de commande Invoke-Command pour démarrer une tâche en arrière-plan sur l'ordinateur Server01. La tâche exécute une commande Get-Eventlog qui obtient les événements dans le journal System. Vous pouvez utiliser le paramètre JobName pour attribuer un nom d'affichage à la tâche. invoke-command -computername Server01 -scriptblock {get-eventlog system} -asjob Les résultats de la commande ressemblent à l'exemple de sortie suivant. SessionId Name State HasMoreData Location Command --------- ---- ----- ----------- -------- ------- 1 Job1 Running True Server01 get-eventlog system Lorsque le paramètre AsJob est utilisé, Invoke-Command retourne le même type d'objet de traitement que Start-Job. Vous pouvez enregistrer l'objet de traitement dans une variable ou utiliser une commande Get-Job pour obtenir la tâche. Notez que la valeur de la propriété Location indique que la tâche a été exécutée sur l'ordinateur Server01. ÉTAPE 2 : GET-JOB Pour gérer une tâche démarrée à l'aide du paramètre AsJob de l'applet de commande Invoke-Command, utilisez les applets de commande Job. Étant donné que l'objet de traitement qui représente la tâche distante se trouve sur l'ordinateur local, vous n'avez pas besoin d'exécuter des commandes distantes pour gérer la tâche. Pour déterminer si la tâche est terminée, utilisez une commande Get-Job. La commande suivante obtient toutes les tâches démarrées dans la session active. get-job Étant donné que la tâche distante a été démarrée dans la session active, une commande Get-Job locale obtient la tâche. La propriété State de l'objet de traitement indique que la commande a été exécutée avec succès. SessionId Name State HasMoreData Location Command --------- ---- ----- ----------- -------- ------- 1 Job1 Completed True Server01 get-eventlog system ÉTAPE 3 : RECEIVE-JOB Pour obtenir les résultats de la tâche, utilisez l'applet de commande Receive-Job. Dans la mesure où les résultats de la tâche sont automatiquement retournés à l'ordinateur sur lequel l'objet de traitement se trouve, vous pouvez obtenir les résultats avec une commande Receive-Job locale. La commande suivante utilise l'applet de commande Receive-Job pour obtenir les résultats de la tâche. Elle utilise l'ID de session pour identifier la tâche. Cette commande enregistre les résultats de la tâche dans la variable $results. Vous pouvez également rediriger les résultats vers un fichier. $results = receive-job -id 1 DÉMARRER UNE TÂCHE DISTANTE QUI CONSERVE LES RÉSULTATS SUR L'ORDINATEUR DISTANT Pour démarrer une tâche en arrière-plan sur un ordinateur distant qui conserve les résultats de la commande sur l'ordinateur distant, utilisez l'applet de commande Invoke-Command pour exécuter une commande Start-Job sur un ordinateur distant. Vous pouvez utiliser cette méthode pour exécuter des tâches en arrière-plan sur plusieurs ordinateurs. Lorsque vous exécutez une commande Start-Job à distance, l'objet de traitement est créé sur l'ordinateur distant et les résultats de la tâche sont gérés sur l'ordinateur distant. Du point de vue de la tâche, toutes les opérations sont locales. Vous exécutez simplement les commandes à distance pour gérer une tâche locale sur l'ordinateur distant. ÉTAPE 1 : INVOKE-COMMAND START-JOB Utilisez l'applet de commande Invoke-Command pour exécuter une commande Start-Job sur un ordinateur distant. Cette commande requiert une session PSSession (connexion permanente). Si vous utilisez le paramètre ComputerName de l'applet de commande Invoke-Command pour établir une connexion temporaire, la commande Invoke-Command est considérée comme terminée lorsque l'objet de traitement est retourné. En conséquence, la connexion temporaire est fermée et la tâche est annulée. La commande suivante utilise l'applet de commande New-PSSession pour créer une session PSSession qui est connectée à l'ordinateur Server01. La commande enregistre la session PSSession dans la variable $s. $s = new-pssession -computername Server01 La commande suivante utilise l'applet de commande Invoke-Command pour exécuter une commande Start-Job dans la session PSSession. Les commandes Start-Job et Get-Eventlog sont placées entre accolades. invoke-command -session $s -scriptblock {start-job -scriptblock {get-eventlog system}} Les résultats ressemblent à l'exemple de sortie suivant. Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 2 Job2 Running True Localhost get-eventlog system Lorsque vous exécutez une commande Start-Job à distance, Invoke-Command retourne le même type d'objet de traitement que Start-Job. Vous pouvez enregistrer l'objet de traitement dans une variable ou utiliser une commande Get-Job pour obtenir la tâche. Notez que la valeur de la propriété Location indique que la tâche a été exécutée sur l'ordinateur local, appelé " LocalHost ", même si elle a été exécutée sur l'ordinateur Server01. Étant donné que l'objet de traitement est créé sur l'ordinateur Server01 et que la tâche s'exécute sur le même ordinateur, elle est considérée comme une tâche en arrière-plan locale. ÉTAPE 2 : INVOKE-COMMAND GET-JOB Pour gérer une tâche en arrière-plan distante, utilisez les applets de commande Job. Étant donné que l'objet de traitement est sur l'ordinateur distant, vous devez exécuter des commandes distantes pour obtenir, arrêter, attendre ou récupérer les résultats de la tâche. Pour savoir si la tâche est terminée, utilisez une commande Invoke-Command pour exécuter une commande Get-Job dans la session PSSession connectée à l'ordinateur Server01. invoke-command -session $s -scriptblock {get-job} La commande retourne un objet de traitement. La propriété State de l'objet de traitement indique que la commande a été exécutée avec succès. SessionId Name State HasMoreData Location Command --------- ---- ----- ----------- -------- ------- 2 Job2 Completed True LocalHost get-eventlog system ÉTAPE 3 : INVOKE-COMMAND RECEIVE-JOB Pour obtenir les résultats de la tâche, utilisez l'applet de commande Invoke-Command pour exécuter une commande Receive-Job dans la session PSSession connectée à l'ordinateur Server01. La commande suivante utilise l'applet de commande Receive-Job pour obtenir les résultats de la tâche. Elle utilise l'ID de session pour identifier la tâche. Cette commande enregistre les résultats de la tâche dans la variable $results. Elle utilise le paramètre Keep de Receive-Job pour conserver le résultat dans le cache de tâches sur l'ordinateur distant. $results = invoke-command -session $s -scriptblock {receive-job -sessionid 2 -keep} Vous pouvez également rediriger les résultats vers un fichier sur l'ordinateur local ou distant. La commande suivante utilise un opérateur de redirection pour enregistrer les résultats dans un fichier sur l'ordinateur Server01. invoke-command -session $s -command {receive-job -sessionid 2 > c:\logs\pslog.txt} VOIR AUSSI about_Jobs about_Job_Details about_Remote Invoke-Command Start-Job Get-Job Wait-Job Stop-Job Remove-Job New-PSSession Enter-PSSession Exit-PSSession