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