Entrées et sorties utilisateur
Introduction
Lors de la création de scripts PowerShell pour de l’administration système ou autre, il peut parfois être utile d’interagir avec l’utilisateur, technicien, administrateur…
Premièrement, cela peut permettre à un script de donner un statut sur son évolution, ce qui est en train d’être réalisé, ce qui va être réalisé, ce qui a été réalisé, avec une notion de succès ou d’échec. De cette manière, la personne exécutant le script saura si celui-ci a permis avec succès ou non de réaliser une action spécifique.
Un autre cas pourrait être de devoir être amené à créer un script qui ira exécuter une action différente en fonction d’une entité, d’un groupe RH, d’un champ dans l’Active Directory…
Pour cela, il peut être utile d’afficher un menu à l’utilisateur lui affichant différents choix puis, en fonction du choix, effectuer telle ou telle action.
Nous allons donc étudier comment mettre cela en place.
Affichage d’informations
1. Comment faire ?
Nous souhaitons afficher des informations depuis la console PowerShell à la personne qui exécute le script.
Pour lister les cmdlets qui nous seront utiles, nous utiliserons la cmdlet Get-Command puis le mot-clé write qui permettra d’écrire sur la console.
PS C:\Users\damien.vanrobaeys> get-command *write*
Name
----
Write-Debug
Write-Error
Write-EventLog
Write-Host
Write-Information
Write-Output
Write-Progress
Write-Verbose
Write-Warning
Nous nous intéresserons aux cmdlets suivantes :
-
Write-Host : afficher un simple texte dans la console.
-
Write-Output : afficher un simple texte dans la console.
-
Write-Warning : afficher une alerte dans la console.
Nous avons donc deux cmdlets pour afficher des messages dans la console PowerShell.
2. Write-Host
Attardons-nous tout d’abord sur la première : Write-Host. Son utilisation est très simple. Un Get-Help nous listera les différents paramètres disponibles.
L’affichage d’un texte se fait tel que ci-dessous :
Write-Host "<Message à afficher>"
Nous afficherons ci-dessous le texte Apprenons PowerShell ensemble.
PS C:\Users\damien.vanrobaeys> Write-Host "Apprenons PowerShell ensemble"
Apprenons PowerShell ensemble
Deux autres paramètres permettront de modifier l’aspect du texte :
-
ForegroundColor : couleur du texte.
-
BackgroundColor : couleur de fond du texte.
Les couleurs suivantes sont disponibles pour la couleur du texte et du fond :
Black, DarkBlue, DarkGreen, DarkCyan, DarkRed...
Affichage d’alertes
Nous avons vu comment afficher des messages informatifs par exemple pour dire que telle chose s’est bien déroulée, que telle chose va se dérouler…
Nous allons maintenant nous intéresser à l’inverse : comment afficher un message lorsque quelque chose ne s’est pas correctement déroulé ?
La cmdlet à utiliser sera alors Write-Warning, qui permettra, comme son nom l’indique, d’écrire et d’afficher une alerte dans la console PowerShell. Son utilisation est aussi simple que le Write-Output car il n’y a qu’une seule valeur à passer en paramètre : du texte.
Ci-dessous un exemple :
Write-Warning "Attention !!! Vous ne pourrez plus vous passer
de PowerShell"
Ci-dessous le résultat :
Nous remarquons donc deux différences par rapport à la cmdlet Write-Output :
-
Le mot WARNING est inscrit au début de l’affichage.
-
Le texte est par défaut écrit en jaune.
Le Write-Warning fonctionne comme le Write-Host dans le sens où il n’est pas envoyé au pipeline et ne peut pas être assigné à une variable.
Saisies utilisateur
Nous avons jusque-là affiché du texte à l’utilisateur, mais saviez-vous que PowerShell permet également à un utilisateur de saisir du texte ?
La saisie de texte par un utilisateur permettra par exemple de lui poser une question et de récupérer sa réponse dans une variable pour ensuite s’en servir pour l’exécution d’un script.
La cmdlet permettant d’afficher du texte à l’utilisateur est Write-Host (ou Write-Output). Le nom de la cmdlet sera Host. Nous avons donc ici le verbe Write signifiant « écrire » ou « afficher dans la console ». Ce que nous souhaitons faire maintenant, c’est récupérer le contenu saisi par l’utilisateur. Nous n’utiliserons pas le verbe Get pour la récupérer, mais nous traduirons plutôt cette action par « lire le contenu saisi par l’utilisateur ». Le verbe sera donc Read et notre cmdlet sera Read-Host.
La cmdlet Get-Help en fournit la description suivante :
PS C:\Users\damien.vanrobaeys> get-help read-host
NAME
Read-Host
SYNOPSIS
Reads a line of input from the console.
SYNTAX
Read-Host [[-Prompt] <System.Object>] [-AsSecureString] [<CommonParameters>]
Son utilisation repose...
Création d’un menu
1. Afficher du contenu
La première étape pour créer un menu est d’afficher un contenu à l’utilisateur, c’est-à-dire un texte indiquant :
-
la marche à suivre,
-
les possibilités qui s’offrent à l’utilisateur en termes de choix.
Comme nous l’avons vu précédemment, pour afficher du texte à l’utilisateur, nous utiliserons la cmdlet Write-Host.
Par exemple, si nous souhaitons afficher le texte "Bonjour Damien", le code sera le suivant :
Write-host "Bonjour Damien"
Ci-dessous le résultat :
Il est également possible d’ajouter un peu d’automatisation en allant récupérer le nom de l’utilisateur connecté afin de l’afficher dans le message d’accueil. Pour cela, nous utiliserons la variable d’environnement username, accessible ainsi :
$env:username
Ci-dessous le résultat :
Le message d’accueil sera alors :
Write-host "Bonjour $env:username"
Ci-dessous le résultat :
Dans un premier temps, nous allons afficher un menu très simple demandant à l’utilisateur s’il va bien.
Nous allons donc ajouter quatre cmdlets :
-
Comment allez-vous ?
-
Je vais bien, merci
-
Ça pourrait aller mieux
-
Je ne me prononce pas
Ci-dessous le code :
write-host "Bonjour $env:username"
write-host "Comment allez-vous ?"
write-host "Je vais bien, merci"
write-host "Ça pourrait aller mieux"
write-host "Je ne me prononce pas"
Ci-dessous le résultat :
Ajoutons maintenant des chiffres pour le choix de la réponse.
write-host "Bonjour $env:username,"
write-host "Comment allez-vous ?"
write-host ""
write-host "1: Je vais bien, merci :-)"
write-host "2: Ça pourrait aller mieux :-("
write-host "3: Je ne me prononce pas :-|"
Ci-dessous le résultat :
L’utilisateur devra ensuite saisir une valeur entre 1 et 3, pour chaque possibilité. Nous avons créé notre première partie du menu en posant une question à l’utilisateur puis en lui proposant un choix. Il ne nous reste plus qu’à gérer...
Des menus en exemples
Dans cette section, nous allons créer quelques menus concrets permettant d’effectuer différentes opérations pour un administrateur système. Le but ici n’est pas de vous fournir un outil déjà prêt et complet, mais uniquement de vous montrer les possibilités qui s’offrent à vous et vous guider sur la création de ceux-ci. L’objectif principal est donc de vous inspirer afin que vous réalisiez votre propre outillage.
1. Menu dépannage de poste
a. Objectif
Ce menu aura pour objectif d’aider les techniciens à accéder à des fonctionnalités du poste ou d’effectuer diverses opérations.
Ci-dessous les différentes actions gérées :
-
ouverture du gestionnaire de périphérique,
-
ouverture du panneau Ajout/suppression de programmes,
-
ouverture des options d’alimentation,
-
ouverture du gestionnaire d’évènements,
-
ouverture du gestionnaire de services.
b. Composition du menu
Le menu débutera tel que ci-dessous :
-
Bonjour $username
-
Veuillez choisir une action à effectuer :
Les choix suivants seront proposés :
-
Gestionnaire de périphérique,
-
Panneau Ajout/suppression de programmes,
-
Options d’alimentation,
-
Gestionnaire d’évènements,
-
Gestionnaire de services.
Chaque choix aura un numéro différent.
Une phrase indiquera de choisir un numéro pour exécuter une action.
c. Création du menu
Commençons par le début, c’est-à-dire informer l’utilisateur de ce qu’il doit faire et des choix qui lui sont offerts.
Ci-dessous le code associé :
write-host "Bonjour $env:username"
write-host "Veuillez choisir ce que vous souhaitez lancer :"
write-host "1: Gestionnaire de périphérique"
write-host "2: Panneau Ajout/suppression de programmes"
write-host "3: Gestionnaire d'évènements"
write-host "4: Gestionnaire de services"
write-host "5: Panneau configuration manager"
Ci-dessous, un aperçu :
Ci-dessous le code permettant de coder les actions :
$Mon_choix = Read-Host "Merci de choisir une réponse:"
Switch($Mon_choix)
{ ...