Powershell en 10 min: exécuter Powershell (partie 1)

Avant de commencer à parler des intructions Powershell, cet article a pour but d’expliquer comment exécuter du code Powershell.

Installation de Powershell

Powershell est livré avec toutes les versions récentes de Windows, toutefois les versions différent suivant la version de Windows:

Version de Powershell Date de sortie Disponible par défaut Disponibilités sur d’autres versions
5.1 Janvier 2017 Windows 10 Anniversary Update Windows 7 SP1,
Windows 8.1,
Windows Server 2012, 2012 R2
5.0 Février 2016 Windows 10 Windows 7 SP1,
Windows 8.1,
Windows Server 2012, 2012 R2
4.0 Octobre 2013 Windows 8.1, Windows Server 2012 R2 Windows 7 SP1
Windows Server 2008 R2 SP1, 2012
3.0 Septembre 2012 Windows 8, Windows Server 2012 Windows 7 SP1
Windows Server 2008 SP2, 2008 R2 SP1
2.0 Octobre 2009 Windows 7, Windows 2008 R2 Windows XP SP3,
Windows Server 2003 SP2
Windows Vista SP1, SP2
Windows Server 2008 SP1, 2008 SP2
1.0 Novembre 2006 Windows Server 2008 Windows XP SP2, SP3
Windows Server 2003 SP1, 2003 SP2, 2003 R2
Windows Vista, Windows Vista SP2

Il est possible d’upgrader la version de Powershell quelque soit la version de Windows citée ci-dessus. Actuellement (août 2017), la version la plus récente est Powershell 5.1 disponible en téléchargeant Windows Management Framework 5.1.

Les versions de Powershell sont rétrocompatibles donc il n’y a pas de risques à installer les dernières versions.

Pour vérifier la version de Powershell, il faut ouvrir une console Powershell et taper:

$PSVersionTable.PSVersion

Le résultat sera du type:

D’une façon générale, plus la version de Powershell est récente et plus elle supporte de commandes. On peut avoir une liste des fonctionnalités disponibles sur: What’s New in Windows PowerShell

Attention aux différences entre Powershell 32 bits et 64 bits

Sur une machine 64 bits, 2 versions de Powershell sont disponibles:

  • 64 bits: %windir%\System32\WindowsPowerShell\v1.0\powershell.exe
  • 32 bits: %windir%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe

Il faut être vigilant sur le choix de la version utilisée en particulier lorsqu’on utilise des snap-ins qui sont compilés pour une architecture précise.

A l’exécution d’un script, on peut connaître l’architecture d’exécution en utilisant la propriété suivante:

[Environment]::Is64BitProcess

Si la valeur est à True alors le script est exécuté dans un environnement 64 bits. Si la valeur est False, l’environnement est 32 bits.

Utilisation de la console

Pour lancer une console Powershell, on peut taper:

  1. Touches [Windows] + [R]
  2. Taper powershell puis [entrée]

On peut aussi taper sur la touche [Windows] puis taper powershell, toutefois il faut faire attention à la version choisie:

  • “Windows Powershell” correspond à la version 64 bits
  • “Windows Powershell (x86)” correspond à la version 32 bits

Enfin à partir du menu Windows, on peut lancer la console en cliquant sur Accessoires ➔ Windows Powershell

Dans la console, quelques fonctionnalités peuvent s’avérer utiles comme:

  • La complétion avec la touche [Tabulation] ou [Majuscule] + [Tabulation]
  • Un historique disponible en tapant [F7] et en choississant avec les flèches la ligne d’historique que l’on souhaite atteidre
  • En cliquant sur le bord en haut à gauche de l’invite de commande Powershell, on peut accéder à d’autres options.

Exécuter un script Powershell

Pour exécuter des scripts Powershell (i.e. fichier ps1) sur une machine, il faut que la politique d’exécution du système le permette. Cette politique n’est pas vraiment un élément de sécurité mais juste un dispositif pour éviter d’exécuter du code Powershell par inadvertance.

Pour connaître la politique d’exécution des scripts powershell sur une machine, il faut exécuter:

Get-ExecutionPolicy -List

Pour avoir plus d’informations sur cette cmdlet, se reporter à Get-ExecutionPolicy.

En exécutant la commande suivante:

Get-ExecutionPolicy -List | Format-Table -AutoSize

On obtient un résultat du type:

Les informations indiquées permettent de savoir quelle est la politique d’exécution suivant une portée (i.e. scope):

  • Process: portée du processus Powershell
  • CurrentUser: portée de l’utilisateur actuel
  • LocalMachine: portée pour tous les utilisateurs de la machine
  • UserPolicy: portée du groupe d’utilisateurs pour l’utilisateur actuel
  • MachinePolicy: portée du groupe d’utilisateurs pour tous les utilisateurs de la machine.

Les valeurs possibles de la politique sont:

  • Restricted: on ne peut pas exécuter des scripts Powershell
  • AllSigned: pour s’exécuter les scripts doivent être signés par un éditeur de confiance.
  • RemoteSigned: les scripts écrits localement sont autorisés en revanche les scripts téléchargés doivent être signés par un éditeur de confiance. Il est possible d’autoriser les scripts téléchargés et non signés en utilisant la cmdlet Unblock-File.
  • Unrestricted: tous les scripts peuvent être exécutés. Un message d’avertissement est affiché lors de l’exécution de scripts téléchargés informant des risques.
  • ByPass: aucune vérification n’est effectuée, tous les scripts peuvent être exécutés.

On peut avoir plus d’informations sur cette politique sur: About Execution Policies.

Dans le cas où on ne peut pas exécuter un script Powershell, à l’exécution on aura une erreur du type:

powershellScript.ps1
powershellScript.ps1 cannot be loaded because the execution of scripts is disabled on this system.

Pour modifier la politique d’exécution et autoriser l’exécution des scripts, on peut exécuter avec les droits administrateur:

Set-ExecutionPolicy RemoteSigned

Pour ouvrir la ligne de commandes Powershell avec les droits administrateur, il faut:

  1. Aller dans Accessoires ➔ Windows PowerShell
  2. Clique droit sur “Windows PowerShell”
  3. Cliquer sur “Exécuter en tant qu’administrateur…”

Comme indiqué plus haut, ce paramètre permettra d’exécuter les scripts locaux sans entrave. En revanche les scripts téléchargés doivent être signés par un éditeur de confiance.
D’autres paramétrages sont plus ouverts comme ByPass ou Unrestricted.

Cette politique n’est pas un dispositif de sécurité mais juste un mécanisme pour éviter d’exécuter des scripts par inadvertance. Même dans le cas où l’exécution n’est pas autorisée, on peut exécuter des cmdlets directement à la ligne de commandes. D’autre part, on peut aussi exécuter des scripts en les affichant directement sur le ligne de commandes et en exécutant avec un pipeline, par exemple:

Get-Content <chemin du script ps1> | PowerShell.exe -noprofile - 

De nombreuses autres méthodes existent: 15 Ways to Bypass the PowerShell Execution Policy.
On peut signer les scripts Powershell: Signing PowerShell Scripts.

Utiliser un environnement pour développer des scripts Powershell

Pour faciliter le développement de scripts Powershell, on peut utiliser le “Windows Powershell ISE” (ISE pour “Integrated Scripting Environment”). Cet environnement est disponible à partir du menu Windows dans Accessoires ➔ Windows PowerShell ➔ Windows PowerShell ISE.

De même que pour l’invite de commande, il existe 2 versions de Windows Powershell ISE:

  • Une version 32 bits identifiée par “Windows Powershell ISE (x86)”
  • Une version 64 bits identifiée par “Windows Powershell ISE”.

Dans l’ISE, on peut avoir des scripts qu’on exécute entiérement ou en partie. Pour exécuter un script entièrement, il suffit d’appuyer sur [F5]. Pour exécuter seulement les commandes surlignées, il faut appuyer sur [F8].

L’ISE se présente de cette façon:

Leave a Reply