Exécute les commandes sur des ordinateurs locaux et distants.

Syntaxe

Invoke-Command [-ScriptBlock] <scriptblock> [[-ComputerName] <string[]>] [-ApplicationName <string>] [-AsJob] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-CertificateThumbprint <string>] [-ConfigurationName <string>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <string>] [-Port <int>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [-UseSSL] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-FilePath] <string> [[-ComputerName] <string[]>] [-ApplicationName <string>] [-AsJob] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-ConfigurationName <string>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <string>] [-Port <int>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [-UseSSL] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-FilePath] <string> [[-Session] <PSSession[]>] [-AsJob] [-HideComputerName] [-JobName <string>] [-ThrottleLimit <int>] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-FilePath] <string> [[-ConnectionURI] <Uri[]>] [-AllowRedirection] [-AsJob] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-ConfigurationName <string>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <string>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-ScriptBlock] <scriptblock> [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-ScriptBlock] <scriptblock> [[-Session] <PSSession[]>] [-AsJob] [-HideComputerName] [-JobName <string>] [-ThrottleLimit <int>] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-ScriptBlock] <scriptblock> [[-ConnectionURI] <Uri[]>] [-AllowRedirection] [-AsJob] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-CertificateThumbprint <string>] [-ConfigurationName <string>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <string>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Description

L'applet de commande Invoke-Command exécute des commandes sur ordinateur local ou distant et retourne toute les sorties des commandes, notamment les erreurs. Avec une commande Invoke-Command unique, vous pouvez exécuter des commandes sur plusieurs ordinateurs.

Pour exécuter une commande unique sur un ordinateur distant, utilisez le paramètre ComputerName. Pour exécuter une série de commandes connexes qui partagent des données, créez une session PSSession (une connexion permanente) sur l'ordinateur distant, puis utilisez le paramètre Session de Invoke-Command pour exécuter la commande dans la session PSSession.

Vous pouvez également utiliser Invoke-Command sur un ordinateur local pour évaluer ou exécuter une chaîne dans un bloc de script tel qu'une commande. Windows PowerShell convertit le bloc de script en une commande et exécute immédiatement la commande dans la portée actuelle, au lieu de répercuter simplement la chaîne sur la ligne de commande.

Avant d'utiliser Invoke-Command pour exécuter des commandes sur un ordinateur distant, consultez about_Remote.

Paramètres

-AllowRedirection

Autorise la redirection de cette connexion vers un autre URI.

Lorsque vous utilisez le paramètre ConnectionURI, la destination distante peut retourner une instruction pour rediriger vers un URI différent. Par défaut, Windows PowerShell ne redirige pas les connexions, mais vous pouvez utiliser le paramètre AllowRedirection pour lui permettre de rediriger la connexion.

Vous pouvez également limiter le nombre de redirections de la connexion en définissant la propriété MaximumConnectionRedirectionCount de la variable de préférence $PSSessionOption ou la propriété MaximumConnectionRedirectionCount de la valeur du paramètre SessionOption. La valeur par défaut est 5. Pour plus d'informations, consultez la description du paramètre SessionOption et la rubrique d'aide relative à l'applet de commande New-PSSessionOption.

Obligatoire ?

false

Position ?

named

Valeur par défaut

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

-ApplicationName <string>

Spécifie le segment du nom d'application dans l'URI de connexion. Utilisez ce paramètre pour spécifier le nom d'application lorsque vous n'employez pas le paramètre ConnectionURI dans la commande.

La valeur par défaut est la valeur de la variable de préférence $PSSessionApplicationName sur l'ordinateur local. Si cette variable de préférence n'est pas définie, la valeur par défaut est WSMAN. Cette valeur convient pour la plupart des utilisations. Pour plus d'informations, consultez about_Preference_Variables.

Le service WinRM utilise le nom d'application afin de sélectionner un écouteur pour le traitement de la demande de connexion. La valeur de ce paramètre doit correspondre à celle de la propriété URLPrefix d'un écouteur sur l'ordinateur distant.

Obligatoire ?

false

Position ?

named

Valeur par défaut

WSMAN

Accepter l'entrée de pipeline ?

true (ByPropertyName)

Accepter les caractères génériques ?

false

-ArgumentList <Object[]>

Fournit les valeurs des variables locales dans la commande. Les variables de la commande sont remplacées par ces valeurs avant l'exécution de la commande sur l'ordinateur distant. Entrez les valeurs dans une liste séparée par des virgules. Les valeurs sont associées aux variables dans leur ordre d'affichage. L'alias pour ArgumentList est « Args ».

Les valeurs figurant dans ArgumentList peuvent être des valeurs réelles, telles que « 1024 », ou des références à des variables locales, telles que « $max ».

Pour utiliser des variables locales dans une commande, utilisez le format de commande suivant :

{param($<nom1>[, $<nom2>]...) <commande-avec-variables-locales>} -ArgumentList <valeur | variable-$local>

Le mot clé « param » répertorie les variables locales utilisées dans la commande. Le paramètre ArgumentList fournit les valeurs des variables, dans leur ordre d'affichage.

Obligatoire ?

false

Position ?

named

Valeur par défaut

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

-AsJob

Exécute la commande en tant que tâche en arrière-plan sur un ordinateur distant. Utilisez ce paramètre pour exécuter des commandes dont l'exécution nécessite beaucoup de temps.

Lorsque vous utilisez AsJob, la commande retourne un objet qui représente la tâche, puis affiche l'invite de commandes. Vous pouvez continuer à travailler dans la session pendant l'exécution de la tâche. Pour gérer la tâche, utilisez les applets de commande Job. Pour obtenir les résultats de la tâche, utilisez Receive-Job.

L'utilisation du paramètre AsJob revient à utiliser Invoke-Command pour exécuter une commande Start-Job à distance. Toutefois, la tâche est créée sur l'ordinateur local avec AsJob, bien qu'elle s'exécute sur un ordinateur distant, et les résultats de la tâche distante sont retournés automatiquement à l'ordinateur local.

Pour plus d'informations sur les tâches en arrière-plan Windows PowerShell, consultez about_Jobs et about_Remote_Jobs.

Obligatoire ?

false

Position ?

named

Valeur par défaut

aucun

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

-Authentication <AuthenticationMechanism>

Spécifie le mécanisme permettant d'authentifier les informations d'identification de l'utilisateur. Les valeurs valides sont Default, Basic, Credssp, Digest, Kerberos, Negotiate et NegotiateWithImplicitCredential. La valeur par défaut est Default.

L'authentification CredSSP n'est disponible que dans Windows Vista, Windows Server 2008 et les versions ultérieures de Windows.

Pour plus d'informations sur les valeurs de ce paramètre, consultez la description de l'énumération System.Management.Automation.Runspaces.AuthenticationMechanism dans MSDN.

ATTENTION : l'authentification CredSSP (Credential Security Service 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 requièrent 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.

Obligatoire ?

false

Position ?

named

Valeur par défaut

Default

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

-CertificateThumbprint <string>

Spécifie le certificat de clé publique numérique (X509) d'un compte d'utilisateur qui a l'autorisation d'exécuter cette action. Entrez l'empreinte numérique du certificat.

Les certificats sont utilisés dans une authentification basée sur les certificats clients. Ils peuvent être mappés uniquement à des comptes d'utilisateur local ; ils ne fonctionnent pas avec des comptes de domaine.

Pour obtenir une empreinte numérique de certificat, utilisez les commandes Get-Item ou Get-ChildItem sur le lecteur Cert: de Windows PowerShell.

Obligatoire ?

false

Position ?

named

Valeur par défaut

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

-ComputerName <string[]>

Spécifie les ordinateurs sur lesquels la commande s'exécute. La valeur par défaut est l'ordinateur local.

Lorsque vous utilisez le paramètre ComputerName, Windows PowerShell crée une liaison temporaire qui est utilisée uniquement pour exécuter la commande spécifiée et est fermée ensuite. Si vous avez besoin d'une connexion permanente, utilisez le paramètre Session.

Tapez le nom NETBIOS, l'adresse IP ou le nom de domaine complet d'un ou de plusieurs ordinateurs dans une liste séparée par des virgules. Pour spécifier l'ordinateur local, tapez le nom de l'ordinateur, « localhost » ou un point (.).

Pour utiliser une adresse IP dans la valeur du paramètre ComputerName, la commande doit inclure le paramètre Credential. En outre, l'ordinateur doit être configuré pour le transport HTTPS ou l'adresse IP de l'ordinateur distant doit être incluse dans la liste TrustedHosts WinRM de l'ordinateur local. Pour obtenir des instructions sur l'ajout d'un nom d'ordinateur à la liste TrustedHosts, consultez « Comment ajouter un ordinateur à la liste des hôtes approuvés » dans about_Remote_Troubleshooting.

Remarque : sous Windows Vista et les versions ultérieures de Windows, pour inclure l'ordinateur local dans la valeur du paramètre ComputerName, vous devez ouvrir Windows PowerShell avec l'option Exécuter en tant qu'administrateur.

Obligatoire ?

false

Position ?

1

Valeur par défaut

Accepter l'entrée de pipeline ?

true (ByPropertyName)

Accepter les caractères génériques ?

false

-ConfigurationName <string>

Spécifie la configuration de session utilisée pour la nouvelle session PSSession.

Entrez un nom de configuration ou l'URI de ressource complet d'une configuration de session. Si vous spécifiez uniquement le nom de la configuration, l'URI de schéma suivant est ajouté en tant que préfixe : https://schemas.microsoft.com/powershell.

La configuration d'une session se trouve sur l'ordinateur distant. Si la configuration de session spécifiée n'existe pas sur l'ordinateur distant, la commande échoue.

La valeur par défaut est la valeur de la variable de préférence $PSSessionConfigurationName sur l'ordinateur local. Si cette variable de préférence n'est pas définie, la valeur par défaut est Microsoft.PowerShell. Pour plus d'informations, consultez about_Preference_Variables.

Obligatoire ?

false

Position ?

named

Valeur par défaut

https://schemas.Microsoft.com/PowerShell/Microsoft.PowerShell

Accepter l'entrée de pipeline ?

true (ByPropertyName)

Accepter les caractères génériques ?

false

-ConnectionURI <Uri[]>

Spécifie un URI (Uniform Resource Identifier) qui définit le point de terminaison de connexion. L'URI doit être complet.

Le format de cette chaîne est le suivant :

<Transport>://<ComputerName>:<Port>/<ApplicationName>

La valeur par défaut est :

http://localhost:80/WSMAN

Les valeurs valides pour le segment Transport de l'URI sont HTTP et HTTPS. Si vous ne spécifiez pas de valeur ConnectionURI, vous pouvez utiliser les paramètres UseSSL, ComputerName, Port et ApplicationName pour indiquer les valeurs d'URI.

Si l'ordinateur de destination redirige la connexion vers un URI différent, Windows PowerShell empêche la redirection à moins que vous n'utilisiez le paramètre AllowRedirection dans la commande.

Obligatoire ?

false

Position ?

1

Valeur par défaut

http://localhost:80/wsman

Accepter l'entrée de pipeline ?

true (ByPropertyName)

Accepter les caractères génériques ?

false

-Credential <PSCredential>

Spécifie un compte d'utilisateur qui a l'autorisation d'exécuter cette action. La valeur par défaut est l'utilisateur actuel.

Tapez un nom d'utilisateur, comme « User01 » ou « Domain01\User01 », ou entrez une variable contenant un objet PSCredential, tel que celui généré par l'applet de commande Get-Credential. Lorsque vous tapez un nom d'utilisateur, vous êtes invité à entrer un mot de passe.

Obligatoire ?

false

Position ?

named

Valeur par défaut

Accepter l'entrée de pipeline ?

true (ByPropertyName)

Accepter les caractères génériques ?

false

-FilePath <string>

Exécute le script local spécifié sur un ou plusieurs ordinateurs distants. Entrez le chemin d'accès et le nom de fichier du script, ou dirigez un chemin d'accès de script vers Invoke-Command. Le script doit résider sur l'ordinateur local ou dans un répertoire auquel l'ordinateur local peut accéder. Utilisez le paramètre ArgumentList pour spécifier les valeurs de paramètres dans le script.

Lorsque vous utilisez ce paramètre, Windows PowerShell convertit le contenu du fichier de script spécifié en un bloc de script, transmet le bloc de script à l'ordinateur distant, puis l'exécute sur l'ordinateur distant.

Obligatoire ?

true

Position ?

2

Valeur par défaut

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

-HideComputerName

Omet le nom d'ordinateur de chaque objet de l'affichage de sortie. Par défaut, le nom de l'ordinateur qui a généré l'objet apparaît dans l'affichage.

Ce paramètre affecte uniquement l'affichage de sortie. L'objet n'est pas modifié.

Obligatoire ?

false

Position ?

named

Valeur par défaut

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

-InputObject <psobject>

Spécifie l'entrée de la commande. Entrez une variable contenant les objets ou tapez une commande ou une expression qui obtient les objets.

Lorsque vous utilisez InputObject, utilisez la variable automatique $input dans la valeur du paramètre ScriptBlock pour représenter les objets d'entrée.

Obligatoire ?

false

Position ?

named

Valeur par défaut

Accepter l'entrée de pipeline ?

true (ByValue)

Accepter les caractères génériques ?

false

-JobName <string>

Spécifie un nom convivial pour la tâche en arrière-plan. Par défaut, les tâches sont nommées « Tâche<n> », où <n> est un nombre ordinal. Ce paramètre est valide uniquement avec le paramètre AsJob.

Si vous utilisez le paramètre JobName dans une commande, la commande est exécutée en tant que tâche et Invoke-Command retourne un objet de traitement, même si vous n'incluez pas le paramètre AsJob dans la commande.

Pour plus d'informations sur les tâches en arrière-plan Windows PowerShell, consultez about_Jobs.

Obligatoire ?

false

Position ?

named

Valeur par défaut

Job<n>

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

-Port <int>

Spécifie le port réseau sur l'ordinateur distant utilisé pour cette commande. La valeur par défaut est le port 80 (le port HTTP).

Avant d'utiliser un autre port, vous devez configurer l'écouteur WinRM sur l'ordinateur distant pour écouter sur ce port. Pour configurer l'écouteur, tapez les deux commandes suivantes à l'invite Windows PowerShell :

remove-item -path wsman:\Localhost\listener\listener* -recurse

new-item -path wsman:\Localhost\listener -Transport http -Address * -port <numéro-port>

N'utilisez pas le paramètre Port à moins d'y être obligé. Le Port défini dans la commande s'applique à tous les ordinateurs ou sessions sur lesquels la commande s'exécute. Le paramètre d'un autre port peut empêcher l'exécution de la commande sur tous les ordinateurs.

Obligatoire ?

false

Position ?

named

Valeur par défaut

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

-ScriptBlock <scriptblock>

Spécifie les commandes à exécuter. Placez les commandes entre accolades ( { } ) pour créer un bloc de script. Ce paramètre est obligatoire.

Par défaut, toutes les variables de la commande sont évaluées sur l'ordinateur distant. Pour inclure des variables locales dans la commande, utilisez le paramètre ArgumentList.

Obligatoire ?

true

Position ?

1

Valeur par défaut

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

-Session <PSSession[]>

Exécute la commande dans les sessions Windows PowerShell spécifiées (PSSession). Entrez une variable qui contient les sessions PSSession ou une commande qui crée ou obtient les sessions PSSession, telle qu'une commande New-PSSession ou Get-PSSession.

Lorsque vous créez une session PSSession, Windows PowerShell établit une connexion permanente à l'ordinateur distant. Utilisez une session PSSession pour exécuter une série de commandes connexes qui partagent des données. Pour exécuter une commande simple ou une série de commandes non liées, utilisez le paramètre ComputerName.

Pour créer une session PSSession, utilisez l'applet de commande New-PSSession. Pour plus d'informations, consultez about_PSSessions.

Obligatoire ?

false

Position ?

1

Valeur par défaut

Accepter l'entrée de pipeline ?

true (ByPropertyName)

Accepter les caractères génériques ?

false

-SessionOption <PSSessionOption>

Définit des options avancées pour la session. Entrez un objet SessionOption que vous créez à l'aide de l'applet de commande New-PSSessionOption.

Les valeurs par défaut des options sont déterminées par la valeur de la variable de préférence $PSSessionOption, si elle est définie. Sinon, la session utilise les valeurs par défaut du système.

Pour obtenir une description des options de session, notamment des valeurs par défaut, consultez la rubrique d'aide relative à l'applet de commande New-PSSessionOption. Pour plus d'informations sur la variable de préférence $PSSessionOption, consultez about_Preference_Variables.

Obligatoire ?

false

Position ?

named

Valeur par défaut

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

-ThrottleLimit <int>

Spécifie le nombre maximal de connexions simultanées qui peuvent être établies pour exécuter cette commande. Si vous omettez ce paramètre ou entrez la valeur 0, la valeur par défaut 32 est utilisée.

La limite d'accélération s'applique uniquement à la commande actuelle, et non à la session ou à l'ordinateur.

Obligatoire ?

false

Position ?

named

Valeur par défaut

32

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

-UseSSL

Utilise le protocole SSL (Secure Sockets Layer) pour établir une connexion avec l'ordinateur distant. Par défaut, SSL n'est pas utilisé.

La Gestion des services Web chiffre tout le contenu Windows PowerShell transmis sur le réseau. UseSSL est une protection supplémentaire qui envoie les données via HTTPS plutôt que via HTTP.

Si vous utilisez ce paramètre, mais que SSL n'est pas disponible sur le port utilisé pour la commande, la commande échoue.

Obligatoire ?

false

Position ?

named

Valeur par défaut

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

<CommonParameters>

Cette applet de commande prend en charge les paramètres courants : -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer et -OutVariable. Pour plus d'informations, consultez about_Commonparameters.

Entrées et sorties

Le type d'entrée est le type des objets que vous pouvez diriger vers l'applet de commande. Le type de retour est le type des objets que l'applet de commande retourne.

Entrées

System.Management.Automation.ScriptBlock

Vous pouvez diriger une commande d'un bloc de script vers Invoke-Command. Utilisez la variable automatique $input pour représenter les objets d'entrée dans la commande.

Sorties

System.Management.Automation.PSRemotingJob ou la sortie de la commande appelée

Lorsque vous utilisez le paramètre AsJob, Invoke-Command retourne un objet de traitement. Sinon, elle retourne la sortie de la commande appelée (valeur du paramètre ScriptBlock).

Remarques

-- Sous Windows Vista et les versions ultérieures de Windows, pour utiliser le paramètre ComputerName de Invoke-Command pour exécuter une commande sur l'ordinateur local, vous devez ouvrir Windows PowerShell avec l'option Exécuter en tant qu'administrateur.

-- Lorsque vous exécutez des commandes sur plusieurs ordinateurs, Windows PowerShell se connecte aux ordinateurs dans l'ordre dans lequel ils apparaissent dans la liste. Toutefois, la sortie de la commande est affichée dans l'ordre dans lequel elle est reçue des ordinateurs distants, qui peut être différent.

-- Les erreurs qui résultent de la commande qui exécute Invoke-Command sont incluses dans les résultats de la commande. Les erreurs qui seraient des erreurs avec fin d'exécution dans une commande locale sont traitées comme des erreurs sans fin d'exécution dans une commande distante. Cette stratégie garantit que les erreurs avec fin d'exécution sur un ordinateur ne terminent pas la commande sur tous les ordinateurs sur lesquels elle est exécutée. Cette pratique est utilisée même quand une commande distante est exécutée sur un ordinateur unique.

-- Si l'ordinateur distant n'est pas dans un domaine que l'ordinateur local approuve, l'ordinateur peut ne pas être en mesure d'authentifier les informations d'identification de l'utilisateur. Pour ajouter l'ordinateur distant à la liste des « hôtes approuvés » du service Gestion des services Web, utilisez la commande suivante dans le fournisseur WSMAN, où <Nom-Ordinateur-Distant> est le nom de l'ordinateur distant :

set-item -path wsman:\Localhost\Client\TrustedHosts -value <Nom-Ordinateur-Distant>.

Exemple 1

C:\PS>invoke-command -filepath c:\scripts\test.ps1 -computerName Server01

Disks: C:, D:, E:
Status: Warning, Normal, Normal

Description
-----------
Cette commande exécute le script Test.ps1 sur l'ordinateur Server01. 

Elle utilise le paramètre FilePath pour spécifier un script se trouvant sur l'ordinateur local. Le script s'exécute sur l'ordinateur distant et les résultats sont renvoyés à l'ordinateur local.






Exemple 2

C:\PS>invoke-command -computername server01 -credential domain01\user01 -scriptblock {get-culture}

Description
-----------
Cette commande exécute une commande Get-Culture sur l'ordinateur distant Server01. 

Elle utilise le paramètre ComputerName pour spécifier le nom d'ordinateur et le paramètre Credential pour exécuter la commande dans le contexte de sécurité de « Domain01\User01 », un utilisateur qui a l'autorisation d'exécuter des commandes. Elle utilise le paramètre ScriptBlock pour spécifier la commande à exécuter sur l'ordinateur distant.

En réponse, Windows PowerShell affiche une boîte de dialogue qui demande le mot de passe et une méthode d'authentification pour le compte User01. Il exécute alors la commande sur l'ordinateur Server01 et retourne le résultat.






Exemple 3

C:\PS>$s = new-pssession -computername server02 -credential domain01\user01

C:\PS> invoke-command -session $s -scriptblock {get-culture}

Description
-----------
Cet exemple exécute la même commande « Get-Culture » dans une session (une connexion permanente) sur l'ordinateur distant Server02. En général, vous créez une session uniquement lorsque vous exécutez une série de commandes sur l'ordinateur distant.

La première commande utilise l'applet de commande New-PSSession pour créer une session sur l'ordinateur distant Server02. Elle enregistre ensuite la session dans la variable $s.

La deuxième commande utilise l'applet de commande Invoke-Command pour exécuter la commande Get-Culture sur Server02. Elle utilise le paramètre Session pour spécifier la session enregistrée dans la variable $s. 

En réponse, Windows PowerShell exécute la commande dans la session sur l'ordinateur Server02.






Exemple 4

C:\PS>invoke-command -computername Server02 -scriptblock {$p = get-process powershell}

C:\PS> invoke-command -computername Server02 -scriptblock {$p.virtualmemorysize}
C:\PS>

C:\PS> $s = new-pssession -computername Server02
C:\PS> invoke-command -session $s -scriptblock {$p = get-process powershell}
C:\PS> invoke-command -session $s -scriptblock {$p.virtualmemorysize}
17930240

Description
-----------
Cet exemple compare les effets des paramètres ComputerName et Session de l'applet de commande Invoke-Command. Il montre comment utiliser une session pour exécuter une série de commandes qui partagent les mêmes données.

Les deux premières commandes utilisent le paramètre ComputerName d'Invoke-Command pour exécuter des commandes sur l'ordinateur distant Server02. La première commande utilise la commande Get-Process pour obtenir le processus PowerShell sur l'ordinateur distant et l'enregistrer dans la variable $p. La deuxième commande obtient la valeur de la propriété VirtualMemorySize du processus PowerShell. 

La première commande réussit. Toutefois, la deuxième commande échoue ; en effet, lorsque vous utilisez le paramètre ComputerName, Windows PowerShell crée une connexion uniquement pour exécuter la commande. Il ferme ensuite la connexion lorsque la commande est terminée. La variable $p a été créée dans une connexion, mais elle n'existe pas dans la connexion créée pour la deuxième commande.

Le problème est résolu par la création d'une session (connexion permanente) sur l'ordinateur distant et par l'exécution des deux commandes connexes dans la même session.

La troisième commande utilise l'applet de commande New-PSSession pour créer une session sur l'ordinateur Server02. Elle enregistre ensuite la session dans la variable $s. Les quatrième et cinquième commandes répètent la série de commandes utilisée dans le premier jeu, mais dans ce cas, la commande Invoke-Command utilise le paramètre Session pour exécuter les deux commandes dans la même session. 

Dans ce cas, parce que les deux commandes s'exécutent dans la même session, elles réussissent, et la valeur $p reste active dans la session $s pour une utilisation ultérieure.






Exemple 5

C:\PS>$command = { get-eventlog -log "windows powershell" | where {$_.message -like "*certificate*"} }

C:\PS> invoke-command -computername S1, S2 -scriptblock $command

Description
-----------
Cet exemple montre comment entrer une commande qui est enregistrée dans une variable locale. 

Lorsque la commande entière est enregistrée dans une variable locale, vous pouvez spécifier la variable comme la valeur du paramètre ScriptBlock. Vous n'avez pas à utiliser le mot clé « param » ou la variable ArgumentList pour envoyer la valeur de la variable locale.

La première commande enregistre une commande Get-Eventlog dans la variable $command. Elle est mise en forme comme un bloc de script.

La deuxième commande utilise l'applet de commande Invoke-Command pour exécuter la commande de $command sur les ordinateurs distants S1 et S2.






Exemple 6

C:\PS>invoke-command -computername server01, server02, TST-0143, localhost -configurationname MySession.PowerShell -scriptblock {get-eventlog "windows powershell"}

Description
-----------
Cet exemple montre comment utiliser l'applet de commande Invoke-Command pour exécuter une commande simple sur plusieurs ordinateurs. 

Elle utilise le paramètre ComputerName pour spécifier les ordinateurs. Les noms d'ordinateurs sont présentés dans une liste séparée par des virgules. La liste d'ordinateurs inclut la valeur « localhost », qui représente l'ordinateur local.

Cette commande utilise le paramètre ConfigurationName pour spécifier une autre configuration de session pour Windows PowerShell et le paramètre ScriptBlock pour spécifier la commande.

Dans cet exemple, la commande qui se trouve dans le bloc de script obtient les événements dans le journal des événements Windows PowerShell sur chaque ordinateur distant.






Exemple 7

C:\PS>$version = invoke-command -computername (get-content machines.txt) -scriptblock {(get-host).version}

Description
-----------
Cette commande obtient la version de l'hôte Windows PowerShell qui s'exécute sur 200 ordinateurs distants. 

Parce qu'une seule commande est exécutée, il n'est pas nécessaire de créer des connexions permanentes (sessions) avec chacun des ordinateurs. À la place, la commande utilise le paramètre ComputerName pour indiquer les ordinateurs.

Elle utilise l'applet de commande Invoke-Command pour exécuter une commande Get-Host. Elle utilise la notation par points pour obtenir la propriété Version de l'hôte Windows PowerShell.

Pour spécifier les ordinateurs, elle utilise l'applet de commande Get-Content afin d'obtenir le contenu du fichier Machine.txt, un fichier de noms d'ordinateurs.

Ces commandes sont exécutées de façon synchrone (une par une). Lorsque les commandes s'achèvent, la sortie des commandes de tous les ordinateurs est enregistrée dans la variable $version. La sortie inclut le nom de l'ordinateur duquel proviennent les données.






Exemple 8

C:\PS>$s = new-pssession -computername Server01, Server02

C:\PS> invoke-command -session $s -scriptblock {get-eventlog system} -AsJob

Id   Name    State      HasMoreData   Location           Command
---  ----    -----      -----         -----------        --------             -------
1    Job1    Running    True          Server01,Server02  get-eventlog system


C:\PS> $j = Get-Job

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

HasMoreData   : True
StatusMessage :
Location      : Server01,Server02
Command       : get-eventlog system
JobStateInfo  : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : e124bb59-8cb2-498b-a0d2-2e07d4e030ca
Id            : 1
Name          : Job1
ChildJobs     : {Job2, Job3}
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}
StateChanged  :

C:\PS> $results = $j | Receive-Job

Description
-----------
Ces commandes exécutent une tâche en arrière-plan sur deux ordinateurs distants. Étant donné que la commande Invoke-Command utilise le paramètre AsJob, les commandes sont exécutées sur les ordinateurs distants, mais la tâche réside réellement sur l'ordinateur local et les résultats sont transmis à l'ordinateur local.

La première commande utilise l'applet de commande New-PSSession pour créer des sessions sur les ordinateurs distants Server01 et Server02.

La deuxième commande utilise l'applet de commande Invoke-Command pour exécuter une tâche en arrière-plan dans chacune des sessions. Elle utilise le paramètre AsJob pour exécuter la commande en tant que tâche en arrière-plan. Cette commande retourne un objet de traitement qui contient deux objets tâche enfants, un pour chacune des tâches exécutées sur les deux ordinateurs distants.

La troisième commande utilise une commande Get-Job pour enregistrer l'objet de traitement dans la variable $j. 

La quatrième commande utilise un opérateur de pipeline (|) pour envoyer la valeur de la variable $j à l'applet de commande Format-List, qui affiche toutes les propriétés de l'objet de traitement dans une liste.

La cinquième commande obtient les résultats des tâches. Elle dirige l'objet de traitement stocké dans $j vers l'applet de commande Receive-Job et stocke les résultats dans la variable $results.






Exemple 9

C:\PS>$MWFO-LOg = Microsoft-Windows-Forwarding/Operational

C:\PS> invoke-command -computername server01 -scriptblock {param($log, $num) get-eventlog -logname $log -newest $num} -ArgumentList $MWFO-log, 10

Description
-----------
Cet exemple montre comment inclure les valeurs des variables locales dans une commande exécutée sur un ordinateur distant.

La première commande enregistre le nom du journal des événements Microsoft-Windows-Forwarding/Operational dans la variable $MWFO-Log.

La deuxième commande utilise l'applet de commande Invoke-Command pour exécuter une commande Get-EventLog sur l'ordinateur distant Server01 qui obtient les 10 derniers événements du journal des événements Microsoft-Windows-Forwarding/Operational sur Server01.

Cette commande utilise le mot clé « param » pour créer deux variables, $log et $num, qui servent d'espaces réservés dans la commande Get-EventLog. Ces espaces réservés ont des noms arbitraires qui ne doivent pas correspondre à ceux des variables locales qui fournissent leurs valeurs.

Les valeurs du paramètre ArgumentList démontrent les deux méthodes différentes pour spécifier des valeurs dans la liste d'arguments. La valeur de l'espace réservé $log est la variable $MFWO-Log, définie dans la première commande. La valeur de la variable $num est 10.

Avant que la commande ne soit envoyée à l'ordinateur distant, les variables sont remplacées par les valeurs spécifiées.






Exemple 10

C:\PS>invoke-command -computername S1, S2 -scriptblock {get-process powershell} 

PSComputerName    Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id   ProcessName
--------------    -------  ------    -----      ----- -----   ------     --   -----------
S1                575      15        45100      40988   200     4.68     1392 powershell
S2                777      14        35100      30988   150     3.68     67   powershell


C:\PS> invoke-command -computername S1, S2 -scriptblock {get-process powershell} -HideComputerName

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id   ProcessName
-------  ------    -----      ----- -----   ------     --   -----------
575      15        45100      40988   200     4.68     1392 powershell
777      14        35100      30988   150     3.68     67   powershell

Description
-----------
Cet exemple montre l'effet de l'utilisation du paramètre HideComputerName d'Invoke-Command. 

Les deux premières commandes utilisent l'applet de commande Invoke-Command pour exécuter une commande Get-Process pour le processus PowerShell. La sortie de la première commande inclut la propriété PsComputerName, qui contient le nom de l'ordinateur sur lequel la commande s'est exécutée. La sortie de la deuxième commande, qui utilise le paramètre HideComputerName, n'inclut pas la colonne PsComputerName.

Le fait d'utiliser le paramètre HideComputerName ne modifie pas l'objet. Vous pouvez toujours utiliser les applets de commande Format pour afficher la propriété PsComputerName de n'importe lequel des objets affectés.






Exemple 11

C:\PS>invoke-command -comp (get-content servers.txt) -filepath c:\scripts\sample.ps1 -argumentlist Process, Service

Description
-----------
Cet exemple utilise l'applet de commande Invoke-Command pour exécuter le script Sample.ps1 sur tous les ordinateurs répertoriés dans le fichier Servers.txt. La commande utilise le paramètre FilePath pour spécifier le fichier script. Elle vous permet d'exécuter le script sur les ordinateurs distants, même si le fichier de script n'est pas accessible aux ordinateurs distants.

Lorsque vous envoyez la commande, le contenu du fichier Sample.ps1 est copié dans un bloc de script et ce dernier est exécuté sur chacun des ordinateurs distants. Cette procédure revient à utiliser le paramètre ScriptBlock pour envoyer le contenu du script.






Exemple 12

C:\PS>$LiveCred = Get-Credential

C:\PS> Invoke-Command -ConfigurationName Microsoft.Exchange `
         -ConnectionUri https://ps.exchangelabs.com/powershell `
         -Credential $LiveCred  -Authentication Basic `
         -scriptblock {Invoke-Command {Set-Mailbox dan -DisplayName "Dan Park"}

Description
-----------
Cet exemple montre comment exécuter une commande sur un ordinateur distant identifié par un URI (adresse Internet). Cet exemple particulier exécute une commande Set-Mailbox sur un serveur Exchange distant. Le backtick (`) utilisé dans la commande est le caractère de continuation de ligne dans Windows PowerShell.

La première commande utilise l'applet de commande Get-Credential pour stocker des informations d'identification Windows Live ID dans la variable $LiveCred. Lorsque la boîte de dialogue des informations d'identification s'affiche, entrez les informations d'identification Windows Live ID.

La deuxième commande utilise l'applet de commande Invoke-Command pour exécuter une commande Set-Mailbox. Elle utilise le paramètre ConfigurationName pour spécifier que la commande doit fonctionner dans une session qui utilise la configuration de session Microsoft.Exchange. Le paramètre ConnectionURI spécifie l'URL du point de terminaison de serveur Exchange. 

Le paramètre d'information d'identification spécifie les informations d'identification Windows Live stockées dans la variable $LiveCred. Le paramètre AuthenticationMechanism spécifie l'utilisation de l'authentification de base. Le paramètre ScriptBlock spécifie un bloc de script qui contient la commande.






Exemple 13

C:\PS>$max = New-PSSessionOption -MaximumRedirection 1

C:\PS> Invoke-Command -ConnectionUri https://ps.exchangelabs.com/powershell `
         -scriptblock {Invoke-Command {Get-Mailbox dan} `
         -AllowRedirection -SessionOption $max

Description
-----------
Cette commande indique comment utiliser les paramètres AllowRedirection et SessionOption pour gérer la redirection URI dans une commande distante.

La première commande utilise l'applet de commande New-PSSessionOption pour créer un objet PSSessionOpption qu'elle enregistre dans la variable $max. Elle fait appel au paramètre MaximumRedirection pour définir la propriété MaximumConnectionRedirectionCount de l'objet PSSessionOption sur 1. 

La deuxième commande utilise l'applet de commande Invoke-Command pour mettre en œuvre une commande Get-Mailbox sur un serveur distant exécutant Microsoft Exchange Server. Elle utilise le paramètre AllowRedirection pour donner l'autorisation explicite de rediriger la connexion vers un autre point de terminaison. Elle fait également appel au paramètre SessionOption pour spécifier l'objet session dans la variable $max.

En conséquence, si l'ordinateur distant spécifié par le paramètre ConnectionURI retourne un message de redirection, Windows PowerShell redirigera la connexion, mais si la nouvelle destination retourne un autre message de redirection, la valeur du nombre de redirection 1 est dépassée, et Invoke-Command retourne une erreur sans fin d'exécution.






Exemple 14

C:\PS>$so = New-PSSessionOption -SkipCACheck

PS C:\> invoke-command $s { get-hotfix } -SessionOption $so -credential server01\user01

Description
-----------
Cet exemple montre comment créer et utiliser un paramètre SessionOption. 

La première commande utilise l'applet de commande New-PSSessionOption pour créer une option de session. Elle enregistre l'objet SessionOption résultant dans le paramètre $so.

La deuxième commande utilise l'applet de commande Invoke-Command pour exécuter une commande Get-Hotfix à distance. La valeur du paramètre SessionOption est l'objet SessionOption dans la variable $so.






Exemple 15

C:\PS>enable-wsmanCredSSP -delegate server02

C:\PS> connect-wsman Server02

C:\PS> set-item wsman:\server02*\service\auth\credSSP -value $true

C:\PS> $s = new-pssession server02

C:\PS> invoke-command -session $s -script {get-item \\Net03\Scripts\LogFiles.ps1} -authentication credssp -credential domain01\admin01

Description
-----------
Cet exemple indique comment accéder à un partage réseau à partir d'une session à distance. 

La commande requiert que la délégation CredSSP soit activée dans les paramètres du client de l'ordinateur local et dans les paramètres de service de l'ordinateur distant. Pour exécuter les commandes de cet exemple, vous devez être membre du groupe Administrateurs sur l'ordinateur local et l'ordinateur distant.

La première commande utilise l'applet de commande Enable-WSManCredSSP pour activer la délégation CredSSP à partir de l'ordinateur local Server01 sur l'ordinateur distant Server02. Le paramètre du client CredSSP est ainsi configuré sur l'ordinateur local.

La deuxième commande utilise l'applet de commande Connect-WSman pour se connecter à l'ordinateur Server02. Cette action ajoute un nœud pour l'ordinateur Server02 au lecteur WSMan: de l'ordinateur local, vous permettant d'afficher et de modifier les paramètres du service Gestion des services Web sur l'ordinateur Server02.

La troisième commande utilise l'applet de commande Set-Item pour redéfinir la valeur de l'élément CredSSP dans le nœud Service de l'ordinateur Server02 sur True. Cette action active CredSSP dans les paramètres de service de l'ordinateur distant.

La quatrième commande utilise l'applet de commande New-PSSession pour créer une session PSSession sur l'ordinateur Server02. Elle enregistre la session PSSession dans la variable $s.

La cinquième commande utilise l'applet de commande Invoke-Command pour exécuter une commande Get-Item de la session dans $s qui obtient un script du partage réseau Net03\Scripts. La commande utilise le paramètre Credential, ainsi que le paramètre Authentication avec la valeur CredSSP.






Voir aussi




Table des matières