Comment exécuter des commandes sur des ordinateurs distants avec PowerShell

exécuter des commandes localement sur les ordinateurs distants est une tâche courante que de nombreux administrateurs informatiques doivent faire tous les jours. Voici comment vous pouvez le faire dans PowerShell.

Il n’est parfois pas suffisant d’utiliser DCOM, RPC et d’autres protocoles distants pour effectuer des tâches sur des ordinateurs distants. Pour exécuter des commandes sur l’ordinateur distant nécessite une approche différente. Un administrateur doit créer une session quelconque et envoyer des commandes sur le réseau qui sont ensuite consommées par l’ordinateur distant.,

Puisqu’il s’agit d’un article sur PowerShell et non sur telnet (vous n’utilisez pas telnet, n’est-ce pas?), nous allons nous en tenir à une technologie appelée PowerShell Remoting. PowerShell Remoting est une fonctionnalité de PowerShell qui a été introduite dans Windows PowerShell v2. Il permet aux utilisateurs d’ouvrir, de gérer et de fermer des sessions sur des ordinateurs distants et d’interagir avec eux comme s’ils étaient assis sur la console locale.,

pour établir une session appelée PSSession avec PowerShell, il faut que L’ordinateur distant ait PowerShell Remoting activé et écoute sur le port 5985 (HTTP) ou 5986 (HTTPS) avec toutes les exceptions de pare-feu habituelles. Selon la façon dont l’utilisateur veut établir la connexion, une certaine configuration de client peut être nécessaire aussi bien. Il existe de nombreuses configurations différentes dans lesquelles un utilisateur peut se retrouver, mais pour cet article, nous allons supposer que les ordinateurs locaux et distants sont tous deux dans le même domaine Active Directory., Dans ce contexte, PowerShell Remoting utilisera Kerberos pour s’authentifier, et nous n’aurons pas besoin de passer d’autres informations d’identification aux commandes.

en supposant que L’ordinateur distant a PowerShell Remoting activé, essayons d’abord d’exécuter des commandes simples sur un ordinateur distant. Comme test pour s’assurer que le code s’exécute sur l’ordinateur distant, j’aime toujours utiliser la commande hostname qui renvoie le nom de l’ordinateur.

Il existe deux façons d’exécuter des commandes à distance via PowerShell Remoting; nous pouvons émettre des commandes de manière interactive ou non interactive., Interactivement signifie que nous aurons besoin d’être à notre ordinateur pour exécuter les commandes physiquement. Commençons par montrer un exemple non interactif.

pour exécuter des commandes distantes de manière non interactive, nous utilisons la commande Invoke-Command. Cette commande a un paramètre ComputerName qui nous permet de spécifier un ordinateur pour exécuter la commande. Nous avons également un paramètre ScriptBlock où nous allons encapsuler les commandes que nous avons l’intention d’exécuter sur l’ordinateur distant. Vous pouvez voir ci-dessous comment cela fonctionne en action. J’exécute la commande hostname localement sur mon ordinateur, puis je l’exécute à distance avec Invoke-Command., Vous pouvez voir qu’il renvoie des résultats différents.

PS C:\> hostname
MACWINVM
PS C:\> Invoke-Command -ComputerName SRV1 -ScriptBlock {hostname}
SRV1

Vous venez de lancer votre première commande à distance! Tout peut entrer dans le paramètre ScriptBlock. Ci-dessous, je crée une instruction if/then à l’intérieur dublock scriptblock comme test pour s’assurer que le code s’exécute à distance.

Vous ne l’avez peut-être pas remarqué, mais la commande Invoke-Command a créé une session légère en arrière-plan pour exécuter cette commande et lorsque la commande était terminée, elle l’a déchirée. Cela est plus évident lorsque vous choisissez d’exécuter des commandes de manière interactive à l’aide de la commande Enter-PSSession.,

la commande Enter-PSSession vous permet de vous connecter à une session distante, d’exécuter des commandes, d’obtenir une sortie et de travailler comme si vous tapiez des commandes dans la console locale. Pour ce faire, vous devez d’abord établir une session. Une façon de le faire est d’utiliser le paramètre ComputerName. Notez ci-dessous que j’ai entré une session distante et que j’ai une nouvelle invite PowerShell qui est précédée du nom de l’ordinateur dans lequel la session s’exécute.

PS C:\> Enter-PSSession -ComputerName SRV1
: PS C:\>

À ce stade, je peux exécuter toutes les commandes que j’aimerais, et ils seront exécutés sur l’ordinateur distant., Nous n’avons pas besoin d’utiliser Invoke-Command pour le faire. Nous exécutons simplement les commandes telles qu’elles sont. Quand nous aurons terminé, nous devrons fermer la session. Pour ce faire, nous utilisons le mot-clé exit qui nous déconnecte de la session et la ferme.

Vous pouvez voir ci-dessous une fois que nous tapons exit et appuyez sur Entrée, nous sommes immédiatement ramenés à notre console locale.

: PS C:\>exit
PS C:\>

PowerShell Remoting est un moyen pratique pour exécuter des commandes sur des ordinateurs distants., Tant que L’ordinateur distant est configuré pour PowerShell Remoting, qui est une configuration unique, il y a une configuration minimale, le cas échéant, nécessaire sur l’ordinateur client pour que cela fonctionne. Surtout, si dans un environnement Active Directory, le processus est transparent et un excellent moyen d’éviter d’avoir à sneakernet tout autour du bureau juste pour exécuter des scripts et des commandes sur tous vos ordinateurs!

Author: admin

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *