Présentation de l’écriture de scripts
L’écriture de scripts PowerShell est le processus qui consiste à écrire un ensemble d’instructions en langage PowerShell et à stocker ces instructions dans un fichier texte. Pourquoi faire cela ? Si vous utilisez PowerShell depuis un certain temps, vous constatez que vous répétez certaines tâches, comme la génération de rapports de journalisation ou la gestion des utilisateurs. Lorsque vous répétez quelque chose fréquemment, il est probablement judicieux de l’automatiser : pour le stocker de manière à faciliter la réutilisation.
Les étapes permettant d’automatiser votre tâche incluent généralement des appels à des applets de commande, des fonctions, des variables, etc. Pour stocker ces étapes, vous créez un fichier qui se termine par .ps1 et enregistrez-le. Vous disposez ensuite d’un script que vous pouvez exécuter.
Avant de commencer à apprendre à écrire des scripts, examinons une vue d’ensemble des fonctionnalités du langage de script PowerShell :
Variables. Vous pouvez utiliser des variables pour stocker des valeurs. Vous pouvez également utiliser des variables comme arguments pour les commandes.
Fonctions. Une fonction est une liste nommée d’instructions. Les fonctions produisent une sortie qui s’affiche dans la console. Vous pouvez également utiliser les fonctions comme entrée pour d’autres commandes.
Remarque
La plupart des tâches pour lesquelles vous utilisez PowerShell se rapportent à des effets secondaires ou à des modifications de l’état du système (local ou autre). Souvent, la sortie est un problème secondaire (par exemple, des données de rapports).
Contrôle de flux. Le contrôle de flux est la façon dont vous contrôlez différents chemins d’exécution à l’aide de constructions telles que
If,ElseIfetElse.Boucles. Les boucles sont des constructions qui vous permettent d’opérer sur des tableaux, d’inspecter chaque élément et d’effectuer des opérations sur chaque élément. Toutefois, les boucles sont plus qu’une simple itération de tableau. Vous pouvez également continuer de manière conditionnelle à exécuter une boucle à l’aide de boucles
Do-While. Pour plus d’informations, consultez À propos de Do.Gestion des erreurs. Il est important d’écrire des scripts robustes qui peuvent gérer différents types d’erreurs. Vous devez connaître la différence entre les erreurs terminantes et non-terminantes. Vous utilisez des constructions comme
TryetCatch. Nous abordons cette rubrique dans la dernière unité conceptuelle de ce module.Expressions. Vous utilisez fréquemment des expressions dans des scripts PowerShell. Par exemple, pour créer des colonnes personnalisées ou des expressions de tri personnalisées. Les expressions sont des représentations de valeurs dans la syntaxe PowerShell.
Intégration de .NET et .NET Core. PowerShell offre une intégration puissante avec .NET et .NET Core. Cette intégration dépasse le cadre de ce module.
Exécuter un script
Vous devez savoir que certains scripts ne sont pas sécurisés. Si vous trouvez un script sur Internet, vous ne devriez probablement pas l’exécuter sur votre ordinateur, sauf si vous comprenez exactement ce qu’il fait. Même des scripts que vous considérez sécurisés peuvent présenter un risque. Par exemple, imaginez un script chargé d’effectuer des tâches de nettoyage dans un environnement de test. Ce script peut être dangereux dans un environnement de production. Vous devez comprendre ce que fait un script, s’il a été écrit par vous-même ou par un collègue, ou si vous l’avez obtenu sur Internet.
PowerShell tente de vous empêcher d’effectuer des opérations involontaires de deux façons principales :
- Condition requise pour exécuter des scripts à l’aide d’un chemin d’accès complet ou relatif. Quand vous exécutez un script, vous devez toujours fournir le chemin d’accès au script. Le fait de fournir le chemin d’accès vous aide à savoir exactement ce que vous exécutez. Il peut s’agir, par exemple, de commandes et d’alias sur votre ordinateur que vous n’avez pas l’intention d’exécuter, mais qui portent le même nom que votre script. L’inclusion du chemin d’accès offre une vérification supplémentaire qui vous assurera d’exécuter exactement ce que vous voulez.
- Stratégie d’exécution. Une stratégie d’exécution est une fonctionnalité de sécurité. Comme le fait d’exiger le chemin d’accès d’un script, une stratégie peut vous empêcher d’exécuter des opérations non intentionnelles. Vous pouvez définir la stratégie sur différents niveaux, tels que l’ordinateur local, l’utilisateur actuel ou une session particulière. Vous pouvez également utiliser un paramètre de stratégie de groupe pour définir des stratégies d’exécution pour les ordinateurs et les utilisateurs.
Ces deux mécanismes ne vous empêchent pas d’ouvrir un fichier, de copier son contenu, de placer ce contenu dans un fichier texte et d’exécuter ce fichier. Ils ne vous empêchent pas non plus d’exécuter le code via la console. Ces mécanismes ont pour objectif de vous empêcher de faire des choses que vous ne voulez pas. Il ne s’agit pas d’un système de sécurité.
Pour créer et exécuter un script :
Créez des instructions PowerShell comme suit et enregistrez-les dans un fichier qui se termine par .ps1 :
# PI.ps1 $PI = 3.14 Write-Host "The value of `$PI is $PI"Exécutez le script en l’appelant par son nom et son chemin d’accès :
Remarque
Avant d’exécuter le script, assurez-vous que l’interpréteur de commandes actuel est PowerShell. Sur Linux ou macOS, vous pouvez également placer un shebang en haut du fichier de script pour définir PowerShell comme interpréteur de script.
./PI.ps1Nous vous recommandons d’inclure l’extension de fichier dans l’appel, mais cela n’est pas obligatoire.
Stratégie d’exécution
Vous pouvez gérer la stratégie d’exécution à l’aide des applets de commande suivantes :
Get-ExecutionPolicy. Cette applet de commande retourne la stratégie d’exécution actuelle. Sur Linux et macOS, la valeur retournée estUnrestricted. Pour ces systèmes d’exploitation, vous ne pouvez pas modifier cette valeur. Cette limitation ne rend pas Linux ou Mac moins sûr. N’oubliez pas qu’une stratégie d’exécution est une fonctionnalité de sécurité, et non pas un mécanisme de sécurité.Set-ExecutionPolicy. Si votre ordinateur exécute Windows, vous pouvez utiliser cette applet de commande pour modifier la valeur d’une stratégie d’exécution. Elle accepte un paramètre-ExecutionPolicy. Il existe plusieurs valeurs possibles. Il est judicieux d’utiliserDefaultcomme valeur. Cette valeur définit la stratégie commeRestrictedsur les clients Windows et commeRemoteSignedsur Windows Server.Restrictedsignifie que vous ne pouvez pas exécuter de scripts. Vous pouvez exécuter uniquement des commandes, ce qui est logique sur un client.RemoteSignedsignifie que des scripts écrits sur l’ordinateur local peuvent être exécutés. Les scripts téléchargés à partir d’Internet doivent être signés par une signature numérique d’un éditeur approuvé.Remarque
Vous pouvez utiliser d’autres valeurs. Pour plus d’informations, consultez À propos des stratégies d’exécution.
Variables
Les variables ne sont pas uniquement destinées aux scripts. Vous pouvez également les définir sur la console. Vous pouvez stocker des valeurs dans des variables afin de pouvoir les utiliser ultérieurement. Pour définir une variable, faites-la précéder du caractère $. Voici un exemple :
$PI = 3.14
Utilisation de variables : guillemets et interpolation
Lorsque vous générez du texte en sortie via Write-Host ou Write-Output, vous pouvez utiliser des guillemets simples ou doubles. Votre choix varie selon que vous souhaitez interpoler ou non les valeurs. Il existe trois mécanismes que vous devez connaître :
Guillemets simples. Les guillemets simples spécifient les littéraux ; ce que vous écrivez est ce que vous obtenez. Voici un exemple :
Write-Host 'Here is $PI' # Prints Here is $PISi vous souhaitez interpoler, pour interpréter et afficher la valeur de
$PI, vous devez utiliser des guillemets doubles.Guillemets doubles. Lorsque vous utilisez des guillemets doubles, les variables dans les chaînes sont interpolées :
Write-Host "Here is `$PI and its value is $PI" # Prints Here is $PI and its value is 3.14Deux choses sont à noter ici. L’accent grave (`) vous permet d’échapper ce qui serait une interpolation de la première instance de
$PI. Dans la seconde instance, la valeur est interpolée et affichée.$(). Vous pouvez également écrire une expression entre guillemets doubles. Pour ce faire, utilisez la construction$(). L’une des façons d’utiliser cette construction est d’interpoler les propriétés des objets. Voici un exemple :Write-Host "An expression $($PI + 1)" # Prints An expression 4.14
Étendue
L’étendue correspond à la manière dont PowerShell définit où les constructions telles que les variables, les alias et les fonctions peuvent être lues et modifiées. Lorsque vous apprenez à écrire des scripts, vous devez savoir à quoi vous avez accès, ce que vous pouvez modifier et où vous pouvez le modifier. Si vous ne comprenez pas le fonctionnement de l’étendue, votre code risque de ne pas fonctionner comme prévu.
Types d’étendue
Parlons des différentes étendues :
Étendue globale. Lorsque vous créez des constructions comme des variables dans cette étendue, elles continuent à exister après la fin de votre session. Tout ce qui est présent lorsque vous démarrez une nouvelle session PowerShell peut être considéré comme figurant dans cette étendue.
Étendue du script. Lorsque vous exécutez un fichier de script, une étendue du script est créée. Par exemple, une variable ou une fonction définie dans ce fichier se trouve dans l’étendue du script. Elle cesse d’exister une fois l’exécution du fichier terminée. Vous pouvez créer une variable, par exemple, dans le fichier de script et cibler l’étendue globale. Toutefois, vous devez définir explicitement cette étendue en ajoutant au début de la variable le mot clé
global.Étendue locale. L’étendue locale correspond à l’étendue actuelle et peut être l’étendue globale ou toute autre étendue.
Règles d’étendue
Les règles d’étendue vous aident à comprendre quelles valeurs sont visibles en un point donné. Elles vous aident aussi à comprendre comment modifier une valeur.
Les étendues peuvent être imbriquées. Une étendue peut avoir une étendue parente. Une étendue parente est une étendue extérieure à l’étendue dans laquelle vous êtes. Par exemple, une étendue locale peut avoir l’étendue globale comme étendue parente. À l’inverse, une étendue peut avoir une étendue imbriquée, également appelée étendue enfant.
Les éléments sont visibles dans l’étendue actuelle et ses étendues enfants. Un élément, comme une variable ou une fonction, est visible dans l’étendue où il a été créé. Par défaut, il est également visible dans toutes les étendues enfants. Vous pouvez modifier ce comportement en rendant l’élément privé dans l’étendue. Voici un exemple qui utilise une variable définie dans la console :
$test = 'hi'Si vous avez un fichier Script.ps1 qui contient le contenu suivant, il imprime « hi » lorsque le script s’exécute :
Write-Host $test # Prints hiVous constatez que la variable
$testest visible à la fois dans l’étendue locale et dans son étendue enfant, dans ce cas, l’étendue du script.Les éléments ne peuvent être modifiés que dans l’étendue de leur création. Par défaut, vous pouvez modifier un élément uniquement dans l’étendue où il a été créé. Vous pouvez modifier ce comportement en spécifiant explicitement une autre étendue.
Profils
Un profil est un script qui s’exécute au démarrage de PowerShell. Vous pouvez utiliser un profil pour personnaliser votre environnement (par exemple, pour modifier des erreurs et des couleurs d’arrière-plan et effectuer d’autres types de personnalisation). PowerShell applique ces modifications à chaque nouvelle session que vous démarrez.
Types de profil
PowerShell prend en charge plusieurs fichiers de profil. Vous pouvez les appliquer à différents niveaux, comme vous pouvez le voir ici :
| Descriptif | Chemin |
|---|---|
| Tous les utilisateurs, tous les hôtes | $PSHOME\Profile.ps1 |
| Tous les utilisateurs, hôte actuel | $PSHOME\Microsoft.PowerShell_profile.ps1 |
| Utilisateur actuel, tous les hôtes | $Home[Mes Documents]\PowerShell\Profile.ps1 |
| Utilisateur actuel, hôte actuel | $Home[Mes ]Documents\PowerShell\Microsoft.PowerShell_profile.ps1 |
Deux variables sont utilisées ici : $PSHOME et $Home.
$PSHOME pointe vers le répertoire d’installation de PowerShell.
$Home est le répertoire de base de l’utilisateur actuel.
D’autres programmes prennent aussi en charge des profils, comme Visual Studio Code.
Créer un profil
Lorsque vous installez PowerShell pour la première fois, il n’existe aucun profil, mais il existe une $Profile variable. Il s’agit d’un objet qui pointe vers le chemin où chaque profil à appliquer doit être placé. Pour créer un profil :
Déterminez le niveau sur lequel vous souhaitez créer le profil. Vous pouvez exécuter
$Profile | Select-Object *pour voir les types de profil et les chemins d’accès qui leur sont associés.Sélectionnez un type de profil et créez un fichier texte à son emplacement à l’aide d’une commande telle que celle-ci :
New-Item -Path $Profile.CurrentUserCurrentHost.Ajoutez vos personnalisations dans le fichier texte et enregistrez-le. La prochaine fois que vous démarrerez une session, vos modifications seront appliquées.