Metsys Blog

Exécuter, planifier des scripts PowerShell depuis une interface Web

Cliquez pour évaluer cet article !
0 avis

Dans cet article, je vais vous présenter comment exécuter et planifier des scripts PowerShell sur les machines de votre parc via une interface Web nommée Rundeck.
Je ne vais pas expliquer dans ce post, comment l’installer mais plutôt comment l’utiliser et comment cela peut-être utile. Nous verrons cela prochainement.

Rundeck, Késako ?

Rundeck est une solution Web permettant d’effectuer des actions sur des nœuds distants via WinRM. Ces nœuds correspondent à des ordinateurs distants.

Pour résumer nous avons :

  • Le serveur Rundeck permettant l’exécution des scripts au travers d’une interface Web
  • Les ordinateurs distants qui seront stockés dans un fichier de configuration (xml, yaml, json)
  • L’interface Web permettant d’exécuter un script ou une simple commande à distance sur une ou plusieurs machines

Pour le dernier point, on peut par exemple imaginer un script PowerShell qui ira ajouter automatiquement dans le fichier de configuration toutes les machines d’un domaine Active Directory, d’une OU, d’un groupe…

Rundeck est une solution Open source développée en Java, pouvant s’installer aussi bien sur des postes Linux (CentOS, Ubuntu, Debian) que Windows (XP, Windows 7, Windows 10, W server).

Ci-dessous un exemple de ce fichier de configuration nommé Resources.xml. Pour ajouter une machine il suffira d’ajouter un nœud dans le fichier XML, accessible depuis l’interface dans les propriétés du projet.


<xml version="1.0" encoding="UTF-8">
<project>
  <node name="Computer1" winrm-authtype="credssp" osFamily="windows" description="POS" tags="" hostname="Computer1.systanddeploy.lab" username="dvanrobaeys"/>
  <node name="Computer2" winrm-authtype="credssp" osFamily="windows" description="POS" tags="" hostname="Computer2.systanddeploy.lab" username="dvanrobaeys"/>
<project>

Rundeck fonctionne avec différents fichiers de configuration qui permettront par exemple :

  • d’ajouter des utilisateurs qui auront accès à l’interface
  • de gérer les droits de ses utilisateurs
  • de gérer un accès à l’interface via son compte AD
  • de modifier l’aspect global de l’interface

Gratuit ou payant ?

Différentes solutions sont disponibles:

La version gratuite (Community) est-elle suffisante ?

Oui, celle-ci permet d’exécuter, déployer, planifier des scripts ou commandes sur autant de machines que l’on souhaite.

Pourquoi la version payante ?

La version payante offre différents avantages, tels que :

  • L’utilisation en cluster
  • De meilleurs dashboards
  • Différents plugins supplémentaires…

Parmi ces plugin on retrouve par exemple :

  • l’exécution d’un script depuis GitHub
  • l’interaction avec VMWare
  • l’interaction avec Azure
  • l’interaction avec JIRA
  • l’interaction avec AWS

A quoi ça ressemble ?

Rundeck est composé de :

  • Une page de login
  • Une page principale
  • Une sidebar avec le menu

La première page liste tous les projets existants ainsi qu’un résumer sur leur exécution.

Qu’est ce qu’un projet ?

Un projet est la partie qui contiendra les différents jobs.
On peut considérer un projet comme un dossier permettant d’organiser votre architecture et vos scripts.

On peut par exemple avoir un projet par environnement :

  • PROD
  • DEV
  • SERVER

En cliquant sur un projet, vos jobs seront affichés, comme ci-dessous:

Qu’est-ce qu’un job ?

Le job est la partie qui sera exécutée sur les machines distantes.
Vous pouvez par exemple :

  • Exécuter un script entier
  • Exécuter une simple commande
  • Exécuter un script depuis GitHub (version Pro)
  • Copier un contenu tel qu’un fichier

Les étapes

Pour configurer un job, il suffira de cliquer sur les propriétés du job puis Configurer le job.


L’ajout de script à exécuter ou d’une action se fait par l’ajout d’une étape.

Vous pouvez exécuter une ou plusieurs étapes dans le même job, par exemple :

  • Une étape pour vérifier la connexion à la machine distante
  • Une étape pour obtenir la liste des paramètres BIOS des machines distantes puis les exporter en CSV
  • Une étape pour copier les CSV de chaque machine sur une machine centrale

Vous pouvez également ajouter une gestion d’erreur dans le but de dire : « Hey si l’étape de vérification de la connexion est KO alors on arrête tout ».

Pour ajouter une étape, il suffit de cliquer sur Ajouter étape, bizarre non ? 🙂

Différents types d’étapes existent:

  • Commandes : permet d’exécuter une simple commande sur la ou les machines
  • Script en ligne :  permet de copier directement le contenu d’un script
  • Job reference : permet d’exécuter un autre job

Pour utiliser un script en ligne, procédez tel que ci-dessous:

<div class="wp-menu-arrow">
<ol>
<li>Ouvrez la partie avancé</li>
<li>Insérer votre script</li>
<li>Ajoutez des arguments si besoin (nous verrons comment les utiliser)</li>
<li>Dans la partie Invocation string, tapez: Powershell.exe -executionpolicy bypass</li>
<li>Dans la partie File extension, tapez: ps1</li>
<li>Dans la partie label, entrez un nom pour l'étape</li>
<li>Cliquez sur Sauver</li>
</ol>
</div>

La partie Job de référence peut être très utile, par exemple, si vous avez un script qui doit être exécuté la nuit dans différents pays avec différents timezones.
Dans ce cas, nous allons créer un job par pays en configurant le bon timezone.
Nous allons créer un job de référence exécutant notre action principale, ce job sera alors appelé en tant qu’étape dans chaque job par pays.
De cette façon, si nous devons apporter une modification au script principal, il faudra le faire une fois et pas pour chaque pays.

Les options

Une autre partie très intéressante dans les jobs est la partie Option.

Celle-ci vous permettra d’ajouter dans votre job :

  • Un password
  • Une zone de saisie
  • Une liste déroulante

Vous pouvez par exemple exécuter des scripts dans un environnement de base : on peut imaginer un job exécutant un script dans une base de donnée, avec un password pré-rempli via le champ password et permettant la connexion à la base de données.

Ou encore, un job qui permettra de gérer des services Windows sur des machines distantes.
Une zone de saisie permettra d’entrer le nom du service à gérer, par exemple  : « spooler ».
Une liste déroulante permettra de choisir l’action à exécuter : Obtenir le statut du service, démarrer/stopper/redémarrer le service.

Pour ajouter une action, il suffit de:

  1. Cliquer sur Add an option
  2. Choisir l’action appropriée

Pour ajouter une zone de saisie:

  1. Cliquez sur « Add an option »
  2. Dans Option, choisir Texte
  3. Donnez un nom à votre Control (celui-ci sera utilisé dans la partie argument). Dans mon cas : « Service_Name »
  4. Facultatif : champ label et description
  5. Cliquez sur sauver
  6. Dans votre script inline, saisir les arguments tels que ci-dessous:
# Add icon the systray
# Part to add i the argument line of the inline script
-ServiceName:${option.Service_Name} # ServiceName will be used in your PowerShell script to get the typed value

# part to add at the beginning of your PowerShell script, in the line bloc.
Param
	(
	[String]$ServiceName
	)

Pour ajouter une liste déroulante:

  1. Cliquez sur ajouter une action
  2. Dans Option, choisir Texte
  3. Donnez un nom à votre Control
  4. Dans la partie Valeurs « autorisées », choisir Liste
  5. Dans la partie Type, saisir les différents valeurs disponibles. Dans mon cas : « Get,Restart,Start,Stop »
  6.  Cliquez sur sauver
  7. Dans la partie « Contrôle », choisir « Valeurs autorisées ci-dessus »
  8. Dans la partie « Valeur par défaut », saisir la valeur à utiliser et à afficher par défaut, dans mon cas : Get
  9. Cliquez sur sauver
  10. Dans votre script en ligne, saisir les arguments tels que ci-dessous:
# Part to add in the argument line of the inline script
-MyAction:${option.Action} -ServiceName:${option.Service_Name}

# Part to add at the beginning of your PowerShell script, in the line bloc.
Param
	(
		[String]$ServiceName,
		[String]$MyAction
	)

Rundeck en action

Dans l’exemple ci-dessous, j’ai créé un projet Windows_Management contenant différents jobs:

  • Action sur un service
  • Ajout d’un utilisateur dans le groupe admin local
  • Vérification d’espace disque
  • Affichage des derniers événements Windows

Le job « Action sur un service » permettra comme mentionné précédemment d’effectuer une action sur un service spécifique sur une ou plusieurs machines.


Le job « Ajout d’un user en admin local » permettra d’ajouter un user saisi dans le groupe admin local sur une ou plusieurs machines.
Le job « Vérification d’espace disque » permettra d’afficher la taille des disques et espace disponible sur une ou plusieurs machines.


Le job « Affichage des derniers événements Windows » permettra d’obtenir des infos sur les journaux événements Windows sur une ou plusieurs machines.

Partie Commandes

Une autre fonction très sympa de Rundeck, est la partie Commandes, disponible dans la sidebar.


Celle-ci permet d’effectuer directement une simple commande sur une ou plusieurs machines sans créer de job, par exemple obtenir le statut du service spooler.
Pour cela :

  1. Choisir le nœud sur lequel exécuter la commande
  2. Choisir la ou les machines.
  3. Saisir ensuite la commande souhaitée, ici : get-service spooler

Cela nous donnera le résultat ci-dessous:

Notez cet article

Vous avez aimé cet article ?

Rendez-le plus visible auprès des internautes en lui mettant une bonne note.

Cliquez pour évaluer cet article !
0 avis

Articles pouvant vous intéresser

RETEX CERT

Tout d’abord, en termes d’éthique et pour respecter la confidentialité des sujets aussi sensibles que