salut à tous c'est Floriant d' Connect
j'espère que vous allez bien aujourd'hui
nous allons parler d'administration à
distance avec PowerShell autrement dit
comment exécuter des commandes ou un
script PowerShell à distance sur une
machine ou 1000 machines et bien c'est
ce que l'on va voir dans cette vidéo on
va exploiter toute la puissance de
l'administration à distance vous avez
deux options pour le faire vous avez
l'option WinRM qui est prise en charge
par défaut sur Windows c'est activé sur
Windows Server il faut l'activer sur
Windows 10 Windows 11 j'avais fait
d'ailleurs une vidéo pour vous montrer
comment le faire avec une GPO l'autre
option c'est le SSH ça nécessite de la
configuration supplémentaire parce que
ce n'est pas activé en écoute on va dire
par défaut ni sur Windows Server ni sur
Windows 10 ou Windows 11 j'avais fait
une vidéo d'ailleurs là-dessus et là on
va vraiment se concentrer sur la partie
administration à distance via WinRM ce
qui est le plus simple on va dire pour
et bien gérer à distance un ensemble de
machines typiquement vous avez besoin de
faire une opération de maintenance qui
nécessite peut-être le redémarrage d'un
ensemble de serveurs et bien ne passez
pas sur chacun des serveurs le faire
tour à tour faites une commande
Powerhell qui va le faire à votre place
sur toutes les machines en même temps
voilà un petit peu le le type de chos
que l'on va pouvoir faire grâce à ce que
l'on va voir aujourd'hui alors avant de
regarder la suite pensez à vous abonner
à la chaîne YouTube et si vous aimez le
travail que l'on fait sur la chaîne et
bien pensez à prendre un petit
abonnement pour nous soutenir alors on
va directement passer dans la console
dans la ligne de commande puisque c'est
vraiment là que tout va se jouer alors
première commande qu'on va voir c'est
test-WS man vous mettez le nom de la
machine et derrière ça permet en fait de
tester est-ce que la machine qui est en
face est prête à avoir une connexion
WinRM voilà tout simplement ce que ça
fait je vous la présente plus à titre
d'information puisque c'est pas elle qui
va nous permettre de lancer des
commandes sur les machines distantes
celle qui va nous permettre de lancer
des commandes sur les machines distantes
elle s'appelle invoc- commande et nous
allons voir un premier cas d'utilisation
dès maintenant alors comment ça se
s'utilise cette commande là et bien-
computer name vous mettez le nom de la
machine ou des machines sur lesquelles
vous souhaitez lancer la commande qui
est précisée ici donc là c'est un script
bloc c'est-à-dire que là j'ai mis entre
cololad une seule commande mais je
pourrais ouvrir un éditeur de code et
avoir un script sur 10 20 ou 50 lignes
et le lancer sur la machine distante
donc ça ça être intéressant là ce que je
vais faire c'est en fait lister les
processus sur la machine distante donc
sans me connecter dessus voilà je peux
voir tiens quels sont les processus sur
cette machine là donc ça prend un petit
peu de temps à charger mais j'ai le
résultat dans la console donc je
consulte les processus qui sont lancés
sur un poste de travail à distance sans
aller me connecter directement dessus en
bureau à distance par exemple
c'est-à-dire sans aussi perturber
potentiellement l'utilisateur qui
travaille actuellement nous pouvons
également lancer directement un script
puisque parfois ça va plus vite de
lancer un script déjà fait plutôt qu'un
script bloc on va dire donc on enlève le
paramètre script bloc on vient mettre à
la place un file pass et là on précise
le chemin vers le fichier PS1 que l'on
veut lancer attention ce fichier doit
être accessible par la machine depuis
laquelle je lance la commande c'estàdire
cette machine là la machine distante si
elle a pas accès à ce script là c'est
pas grave vous pouvez le lancer comme ça
du coup donc je vais lancer ce script et
en fait ce qu'il va faire tout
simplement c'est lister le contenu du
répertoire C2 point users en fait donc
là j'ai la liste en gros la liste des
profils utilisateurs présents sur la
machine distante et à chaque fois on
voit on a le PS computer name qui est là
ça me permet de savoir bien quel est ce
résultat-là et correspond à quelle
machine puisque si on interroge
plusieurs machines tout va être mélangé
entre guillemets donc c'est important
d'avoir ce filtre dans le cas où le
script que vous souhaitez lancer est
déjà sur la machine distante et bien en
fait ce que vous faites c'est tout
simplement à la place de faire un file
pass ici vous faites un script bloc et
vous mettez les accolades comme ceci et
là ça sous-entend dans le cas présent
que le script on va le lancer il est
directement sur la machine distante en
fait autre exemple cette fois-ci on va
cibler deux machines W11-01
W11-03 on s'est parlé non par une
virgule et je vais simplement lancer une
commande qui permet de redémarrer le
service spoiler d'impression je n'ai
aucun retour dans la console donc en
gros ça s'est bien passé si vous avez
des problèmes de connexion WinRM vous
avez de toute façon des gros messages en
rouge qui vont apparaître dans la
console pour vous expliquer qu'il y a
bien eu un problème de connexion donc là
on voit qu'on peut lancer une commande
sur plusieurs machines en même temps de
façon très simple je peux avoir une
liste beaucoup plus longue avec
énormément de machines même une liste
qu'on va récupérer depuis une base de
données depuis un fichier depuis
l'active directory voilà tout ça c'est
possible donc d'ailleurs on pourrait
faire une variable telle que celle-ci où
on fait en fait un tableau avec la liste
des machines et quand on appelle la
commande qui est là donc simplement ce
qu'on fait en fait au lieu de mettre la
liste de façon statique telle que c'est
présenté ici on vient mettre la variable
computer list et là l'avantage c'est que
vous avez si vous avez besoin de faire
plusieurs invocand et bien ce que vous
faites c'est que et bien vous avez
simplement la variable qui est ici à
appeler et vous modifiez votre liste
directement en entête du script donc si
jamais vous avez besoin de rajouter une
machine vous venez alimenter directement
votre tableau ce qui est quand même plus
intéressant maintenant si on veut
pousser le concept un petit peu plus
loin plutôt que de faire des listes
statiques on peut récupérer des listes
de machines dynamiques par exemple dans
Active Directory on imagine que j'ai
envie de lancer une action sur toutes
les machines qui sont dans le PC alors
on pourrait après affiner par rapport au
nom système d'exploitation ou ou un
autre attribut et bien en fait on va
faire une liste qui va être basée donc
sur on va faire un get computer on va
récupérer toutes les machines qui se
situent dans l'Ouc en mettant le
distinguished name de cette OU là et on
va récupérer uniquement le nom DNS de
chaque machine donc je fais ça si
j'affiche la variable computer list AD
comme ceci voilà j'ai une liste de voilà
7 H machines qui est apparue donc
maintenant je pourrais en fait relancer
une commande telle que précédemment pour
aller exécuter une action sur ces
machines là donc là je vais mettre un
exemple alors qui est pas forcément très
lisible on va dire dans la machine dans
la console ici puisque c'est sur
plusieurs lignes là en fait je récupère
l'espace disque restant sur toutes les
machines qui sont listées ici alors du
coup j'ai des erreurs en rouge lorsque
la machine n'est pas allumée ou qu'elle
a pas été configurée en WinRM là en fait
toutes mes machines ne sont pas
démarrées donc forcément je vais avoir
des erreurs mais quand ça marche par
exemple c'est le cas ici sur le la
machine Windows 11 03 et bien on me dit
voilà le C2 points il y a donc
32,4 Go d'espace disque utilisé donc et
sur la machine 01 on a 38,96 Go utiliser
alors à chaque fois il me ressort le
disque D qui est en fait le lecteur DVD
alors il faudrait que j'affine un petit
peu ma commande qui est ici pour exclure
le lecteur DVD voilà on pourrait affiner
un petit peu plus ce script là mais tout
ça pour vous montrer qu'en fait avec
quelques lignes je pourrais aller
récolter une information sur un ensemble
de machines de façon très simple et
gagner beaucoup de temps alors si je
devais faire ça directement machine par
machine enfin ça pourrait être beaucoup
plus long beaucoup plus pénible mais le
fait d'avoir l'accès à distance et de
maîtriser un minimum Power Shell bien
nous permet de gagner vraiment en
efficacité comme on peut le voir autre
chose que vous pouvez faire c'est qu'en
fait là du coup quand je fais un invoque
commande de cette façon je ne précise
aucun identifiant il il reprend en fait
le compte avec lequel je suis
actuellement connecté au niveau de la
session PowerShell donc par héritage au
niveau de la session Windows sauf si
j'ai ouvert en tant que euh ce qui veut
dire que euh c'est pas for j'aurais pas
forcément les bons droits si j'utilise
un compte standard sur ma machine et que
j'ai besoin d'un compte spécifique avec
des privilèges pour aller sur les
machines distance ce qui est en principe
le cas si vous respectez les bonnes
pratiques de sécurité et bien du coup je
vais forcément devoir préciser des
identifiants donc je peux me faire une
variable dollar identifiant au sein de
laquelle je vais mettre un compte alors
là c'est un lab je me permets de mettre
le compte administrateur du domaine
voilà donc je mets le compte ici je fais
OK je le stock dans ma variable et du
coup après quand je vais faire ma
commande alors je pourrais reprendre
tout simplement tiens je pourrais
prendre simplement celle-ci faire AD ici
et là je vais faire simplement la
commande host name voilà c'est l'idée
c'est surtout de vous montrer la
mécanique pas forcément de d'exécuter
telle ou telle commande et ce que je
vais venir rajouter en fait ici c'est un
créential avec dollar identifiant comme
ça je vais exécuter une commande sur les
machines distantes en m'authentifiant
avec les identifiants que j'ai saisi
précédemment alors là on a bien les
machines qui retournent leur nom dans la
console sauf celles qui sont éteintes et
cetera on a toujours cette voilà cette
problématique comme tout à l'heure mais
en tout cas ça marche bien je me suis
bien authentifié avec le compte que j'ai
précisé ici donc ça aussi c'est à
connaître autre chose qui est aussi
important et à connaître c'est les
sessions persistantes en fait quand on
lance une commande avec Invox Commande
on crée une session PowerShell on
exécute la commande et on ferme la
session Powerhell c'est temporaire on
peut créer des PS sessions c'estàd
sessions persistantes donc on va faire
en fait une variable par exemple ma
session une new PS session qui va être
montée sur cette machine là avec ces
identifiants là donc je fais entrer je
mets mon mot de passe voilà et là j'ai
initialisé une session donc je peux
regarder hein ma session euh voilà ça me
retourne la machine la session est
ouverte et donc tous les échanges que je
vais faire dans cette session vont être
mémorisés ce qui permet aussi de
récupérer un résultat de le réexploiter
dans la prochaine commande et cetera
c'est ça ouvre des possibilités
différentes et je peux même faire un
enter PS session voilà alors je vais
quand même mettre le nom de la machine
effectivement alors il me le demande
donc je mets ITC connect.lal donc avec
le nom de la machine devant voilà et là
ce qui va se passer c'est que je rentre
en connexion à distance sur la machine
W101 donc là toutes les commandes que je
lance je les lance directement sur la
machine distante c'est comme si j'avais
ouvert une connexion SSH à distance sur
la machine voilà pour imager un petit
peu sauf que là c'est fait en PowerShell
via le protocole WinRM on aura pu le
faire aussi en SSH mais du coup là je
peux administrer ma machine à distance
ensuite faire un exit et je pourrais
même faire voilà remove PS session et
mettre donc session et je vais mettre
dollar ma session voilà je fais entrer
ça j'ai clôturé ma session manuellement
une fois que j'avais une fois que j'ai
terminé bien de faire mes opérations
mais là on voit que c'est une approche
différente tout en ayant cette capacité
à faire des actions à distance terminons
par un dernier exemple pour évoquer la
capacité à vog commande à prendre des
arguments alors on va ici définir au
niveau local sur la machine une variable
qui s'appelle service name et la valeur
c'est WinRM alors on va passer cette
valeur là en tant
qu'argument avec Invo commande pour
exploiter la valeur sur la machine
distante alors comment on va faire ça
ben c'est tout simple on va en fait
rajouter ici un tiret argument list on
met la variable de l'argument je
pourrais faire derrière une virgule avec
d'autres d'autres valeurs à chaque fois
séparé par une virgule et on va
exploiter ça dans le script bloc on va
faire donc par exemple ici je fais un
get service je voudrais récupérer l'état
du service WinRM on va pas mettre dollar
service name on va exploiter une
variable automatique qui est dollar ARG
avec un S et en fait ça ça va
représenter un tableau d'argument le
tableau la première valeur du tableau
c'est toujours l'index 0 donc je fais
entre crochet zéro et en fait ça ça me
permet en gros de récupérer la valeur de
ça et ça ça correspond à ça pour faire
un petit peu la la remontée au niveau
information donc je fais ça et voilà ça
me remonte bien dans la console l'état
du service WinRM sur la machine que j'ai
ciblé en l'occurrence donc là je suis
sur Computer list donc il y avait
plusieurs machines je crois qu'il y
avait la machine 02 mais elle est
éteinte donc c'est pour ça que ça mine
un petit peu c'est qu'il va me renvoyer
une erreur mais tout ça pour dire voilà
qu'on peut aussi passer les informations
même si c'est une session distante tout
ça peut communiquer et vraiment ça ouvre
la voix à pas mal de choses voilà nous
venons de voir comment utiliser Invoque
Commande en PowerShell pour faire de
l'administration à distance en ligne de
commande pour lancer une commande un
script voir même plusieurs lignes de
code sur une machine ou plusieurs
machines qu'on récupère de façon
dynamique dans la D via une liste
statique voilà il y a plein de choses
possibles alors maintenant à vous
d'appliquer ça dans le contexte de votre
entreprise pour bien gagner en
efficacité et automatiser certaines
tâches je profite aussi de cette vidéo
pour vous rappeler que vous avez un
cours en ligne disponible sur
itconnect.fr pour apprendre PowerShell
de A à Z et vous avez aussi mon livre
disponible sur Amazon pour apprendre
PowerShell dans le même esprit alors
voilà j'espère que ça vous a plu
n'hésitez pas à liker à partager et je
vous dis à très vite ciao
[Musique]