RUBRIQUE
about_Scripts
DESCRIPTION COURTE
Décrit comment écrire et exécuter des scripts dans Windows PowerShell.
DESCRIPTION LONGUE
Un script est un fichier de texte brut qui contient une ou
plusieurs commandes Windows PowerShell. Les scripts Windows
PowerShell ont l'extension de nom de fichier .ps1.
L'écriture d'un script enregistre une commande pour une
utilisation ultérieure et facilite son partage avec d'autres
utilisateurs. Plus important encore, il vous permet d'exécuter
les commandes simplement en tapant le chemin d'accès au script et
le nom de fichier. Les scripts peuvent être aussi simples qu'une
commande unique dans un fichier ou aussi longs qu'un programme
complexe.
Les scripts ont des fonctionnalités supplémentaires, par exemple
le commentaire spécial #Requires, l'utilisation de paramètres, la
prise en charge des sections Data et la signature numérique pour
la sécurité. Vous pouvez également écrire des rubriques d'aide
pour les scripts et pour toutes les fonctions dans le script.
COMMENT ÉCRIRE UN SCRIPT
Un script peut contenir toutes les commandes Windows PowerShell
valides, notamment des commandes uniques, des commandes qui
utilisent le pipeline, des fonctions et des structures de
contrôle, par exemple les instructions If et les boucles For.
Pour écrire un script, démarrez un éditeur de texte (tel que le
Bloc-notes) ou un éditeur de script (tel que l'environnement
d'écriture de scripts intégré [ISE] de Windows PowerShell. Tapez
les commandes et enregistrez-les dans un fichier avec un nom de
fichier valide et l'extension de nom de fichier .ps1.
L'exemple suivant est un script simple qui obtient les services
en cours d'exécution sur le système actuel et les enregistre dans
un fichier journal. Le nom du fichier journal est créé à partir
de la date actuelle.
$date = (get-date).dayofyear
get-service | out-file "$date.log"
Pour créer ce script, ouvrez un éditeur de texte ou un éditeur
de script, tapez ces commandes, puis enregistrez-les dans un fichier
nommé ServiceLog.ps1.
COMMENT EXÉCUTER UN SCRIPT
Avant de pouvoir exécuter un script, vous devez modifier la
stratégie d'exécution Windows PowerShell par défaut. La stratégie
d'exécution par défaut, " Restricted ", empêche l'exécution de
tous les scripts, notamment ceux que vous écrivez sur
l'ordinateur local. Pour plus d'informations, consultez
about_Execution_Policies.
Pour exécuter un script, tapez le nom complet et le chemin
d'accès complet au fichier de script.
Par exemple, pour exécuter le script ServicesLog dans le
répertoire C:\Scripts, tapez :
c:\scripts\ServicesLog.ps1
Pour exécuter un script dans le répertoire actif, tapez le chemin
d'accès à ce répertoire ou utilisez un point pour le représenter,
suivi d'une barre oblique inverse (.\).
Par exemple, pour exécuter le script ServicesLog.ps1 dans le
répertoire local, tapez :
.\ServicesLog.ps1
En tant que fonctionnalité de sécurité, Windows PowerShell
n'exécute pas les scripts lorsque vous double-cliquez sur l'icône
de script dans l'Explorateur Windows ou que vous tapez le nom du
script sans un chemin d'accès complet, même quand le script est
dans le répertoire actif. Pour plus d'informations sur l'exécution
de commandes et de scripts dans Windows PowerShell, consultez
about_Command_Precedence.
EXÉCUTION DE SCRIPTS À DISTANCE
Pour exécuter un script sur un ordinateur distant, utilisez le
paramètre FilePath de l'applet de commande Invoke-Command.
Entrez le chemin d'accès et le nom de fichier du script comme
valeur du paramètre FilePath. Le script doit se trouver sur
l'ordinateur local ou dans un répertoire auquel l'ordinateur
local peut accéder.
La commande suivante exécute le script ServicesLog.ps1 sur
l'ordinateur distant Server01.
invoke-command -computername Server01 -filepath C:\scripts\servicesLog.ps1
PARAMÈTRES DANS LES SCRIPTS
Pour définir des paramètres dans un script, utilisez une
instruction Param. L'instruction Param doit être la première
instruction dans un script, à l'exception des commentaires et des
instructions #Requires.
Les paramètres de script fonctionnent comme les paramètres de
fonction. Les valeurs des paramètres sont disponibles pour toutes
les commandes dans le script. Toutes les fonctionnalités des
paramètres de fonction, notamment l'attribut Parameter et ses
arguments nommés, sont également valides dans les scripts.
Lors de l'exécution du script, les utilisateurs du script tapent
les paramètres après le nom du script.
L'exemple suivant illustre un script Test-Remote.ps1 avec un
paramètre ComputerName. Les deux fonctions de script peuvent
accéder à la valeur du paramètre ComputerName.
param ($ComputerName = $(throw "Le paramètre ComputerName est
requis."))
function CanPing {
$error.clear()
$tmp = test-connection $computername -erroraction SilentlyContinue
if (!$?)
{write-host "Échec du test Ping : $ComputerName."; return $false} else
{write-host "Test ping réussi : $ComputerName"; return $true} }
function CanRemote {
$s = new-pssession $computername -erroraction SilentlyContinue
if ($s -is [System.Management.Automation.Runspaces.PSSession])
{write-host "Test distant réussi : $ComputerName."}
else
{write-host "Échec du test distant : $ComputerName."}
}
if (CanPing $computername) {CanRemote $computername}
Pour exécuter ce script, tapez le nom du paramètre après le nom
du script. Par exemple :
C:\PS> .\test-remote.ps1 -computername Server01
Test ping réussi : Server01
Échec du test distant : Server01
Pour plus d'informations sur l'instruction Param et les
paramètres de fonction, consultez about_Functions et
about_Functions_Advanced_Parameters.
AIDE SUR LES SCRIPTS
L'applet de commande Get-Help permet d'obtenir de l'aide sur les
scripts, mais aussi sur les applets de commande, les fournisseurs
et les fonctions. Pour obtenir de l'aide sur un script, tapez
Get-Help ainsi que le chemin d'accès et le nom de fichier du
script. Si le chemin d'accès au script est dans votre variable
d'environnement Path, vous pouvez l'omettre.
Par exemple, pour obtenir de l'aide sur le script ServicesLog.ps1, tapez :
get-help C:\admin\scripts\ServicesLog.ps1
Vous pouvez écrire de l'aide pour un script à l'aide de l'une ou
l'autre des deux méthodes suivantes :
-- Aide basée sur des commentaires pour les scripts
Créez une rubrique d'aide en utilisant des mots clés spéciaux
dans les commentaires. Pour créer de l'aide basée sur des
commentaires pour un script, les commentaires doivent être
placés au début ou à la fin du fichier de script. Pour plus
d'informations sur l'aide basée sur des commentaires, consultez
about_Comment_Based_Help.
-- Aide XML pour les scripts
Créez une rubrique d'aide XML du type généralement créé pour
les applets de commande. L'aide XML est requise si vous
traduisez des rubriques d'aide dans plusieurs langues.
Pour associer le script à la rubrique d'aide XML, utilisez le
mot clé de commentaires d'aide .ExternalHelp. Pour plus
d'informations sur le mot clé ExternalHelp, consultez
about_Comment_Based_Help. Pour plus d'informations sur l'aide
XML, consultez " How to Write Cmdlet Help " (page éventuellement
en anglais) dans la bibliothèque MSDN (Microsoft Developer Network)
à l'adresse https://go.microsoft.com/fwlink/?LinkID=123415.
PORTÉE DU SCRIPT ET APPEL DE SOURCE DE TYPE " DOT SOURCING "
Chaque script est exécuté dans sa propre portée. Les fonctions,
variables, alias et lecteurs créés dans le script existent
uniquement dans la portée du script. Vous ne pouvez pas accéder
à ces éléments, ni à leurs valeurs, dans la portée dans laquelle
le script est exécuté.
Pour exécuter un script dans une portée différente, vous pouvez
spécifier une portée, telle que Global ou Local, ou effectuer un
appel de source de type " dot sourcing " du script.
La fonctionnalité d'appel de source de type " dot sourcing " vous
permet d'exécuter un script dans la portée actuelle plutôt que
dans la portée du script. Lorsque vous exécutez un script en
utilisant cette fonctionnalité, les commandes dans le script sont
exécutées comme si vous les aviez tapées à l'invite de commandes.
Les fonctions, variables, alias et lecteurs que le script crée
figurent dans la portée dans laquelle vous travaillez. Une fois
le script exécuté, vous pouvez utiliser les éléments créés et
accéder à leurs valeurs dans votre session.
Pour effectuer un appel de source de type " dot sourcing " d'un
script, tapez un point (.) et un espace avant le chemin d'accès
au script.
Par exemple :
. C:\scripts\UtilityFunctions.ps1
- ou -
. .\UtilityFunctions.ps1
Après l'exécution du script UtilityFunctions, les fonctions et
variables que le script crée sont ajoutées à la portée actuelle.
Par exemple, le script UtilityFunctions.ps1 crée la fonction
New-Profile et la variable $ProfileName.
#In UtilityFunctions.ps1
function New-Profile
{
Write-Host "Exécution de la fonction New-Profile"
$profileName = split-path $profile -leaf
if (test-path $profile)
{write-error "Il existe déjà un profil $profileName sur cet ordinateur."}
else
{new-item -type file -path $profile -force }
}
Si vous exécutez le script UtilityFunctions.ps1 dans sa propre
portée, la fonction New-Profile et la variable $ProfileName
existent uniquement pendant l'exécution du script. Au terme de
l'exécution du script, la fonction et la variable sont
supprimées, comme illustré dans l'exemple suivant.
C:\PS> .\UtilityFunctions.ps1
C:\PS> New-Profile
Le terme " new-profile " n'est pas reconnu en tant qu'applet
de commande, fonction, programme exécutable ou fichier de
script. Vérifiez le terme et réessayez.
À la ligne : 1 Caractère : 12
+ new-profile <<<<
+ CategoryInfo : ObjectNotFound: (new-profile:String) [],
+ FullyQualifiedErrorId : CommandNotFoundException
C:\PS> $profileName
C:\PS>
Lorsque vous effectuez un appel de source de type " dot
sourcing " du script et l'exécutez, il crée la fonction
New-Profile et la variable $ProfileName dans votre session dans
votre portée. Après l'exécution du script, vous pouvez utiliser
la fonction New-Profile dans votre session, comme illustré dans
l'exemple suivant.
C:\PS> . .\UtilityFunctions.ps1
C:\PS> New-Profile
Directory: C:\Users\juneb\Documents\WindowsPowerShell
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 14/1/2009 15:08 0 Microsoft.PowerShellISE_profile.ps1
C:\PS> $profileName
Microsoft.PowerShellISE_profile.ps1
Pour plus d'informations sur la portée, consultez about_Scopes.
SCRIPTS DANS LES MODULES
Un module est un ensemble de ressources Windows PowerShell
associées qui peuvent être distribuées comme une unité. Vous
pouvez utiliser les modules pour organiser vos scripts, fonctions
et autres ressources. Vous pouvez également les utiliser pour
distribuer votre code à d'autres utilisateurs et obtenir du code
de sources fiables.
Vous pouvez inclure des scripts dans vos modules ou créer un
module de script, qui est un module constitué entièrement ou
principalement d'un script et de ressources de prise en charge.
Un module de script est simplement un script avec une extension
de nom de fichier .psm1.
Pour plus d'informations sur les modules, consultez about_Modules.
AUTRES FONCTIONNALITÉS DE SCRIPT
Windows PowerShell a de nombreuses fonctionnalités utiles que
vous pouvez utiliser dans les scripts.
#Requires
Vous pouvez utiliser une instruction #Requires pour empêcher
l'exécution d'un script sans les modules ou composants
logiciels enfichables spécifiés et une version spécifiée de
Windows PowerShell. Pour plus d'informations, consultez
about_Requires.
$MyInvocation
La variable automatique $MyInvocation contient des
informations sur la commande actuelle, notamment le script
actuel. Vous pouvez utiliser cette variable et ses propriétés
pour obtenir des informations sur le script pendant qu'il
s'exécute. Par exemple, la variable $MyInvocation.MyCommand.Pa
th contient le chemin d'accès et le nom de fichier du script.
Sections Data
Vous pouvez utiliser le mot clé Data pour isoler des données
de la logique des scripts. Les sections Data peuvent également
simplifier la localisation. Pour plus d'informations, consultez
about_Data_Sections et about_Script_Localization.
Signature du script
Vous pouvez ajouter une signature numérique à un script.
Selon la stratégie d'exécution, vous pouvez utiliser des
signatures numériques pour limiter l'exécution de scripts qui
pourraient inclure des commandes potentiellement dangereuses.
Pour plus d'informations, consultez about_Execution_Policies
et about_Signing.
VOIR AUSSI
about_Command_Precedence
about_Comment_Based_Help
about_Execution_Policies
about_Functions
about_Modules
about_Profiles
about_Requires
about_Scopes
about_Script_Blocks
about_Signing
Invoke-Command