PowerShell est une ligne de commande multiplateforme et un utilitaire de script de Microsoft. Utilisez cette balise pour les questions sur l'écriture et l'exécution des scripts PowerShell UNIQUEMENT. Les questions de programmation spécifiques à la version multiplateforme PowerShell Core (Windows, macOS et Linux) doivent être étiquetées [powershell-core]. Les questions sur l'administration du système doivent être posées sur Super User ou Server Fault.

Les questions sur les tâches d'administration Windows impliquant PowerShell doivent être posées sur Super utilisateurou Server Fault. Les questions sur le sujet concernent UNIQUEMENT l'écriture de scripts

Windows PowerShell

powershellest un shell interactif et un langage de script inclus à l'origine avec Microsoft Windows 7 et Microsoft Windows Server 2008 R2 et versions ultérieures. Il comprend un shell de ligne de commande (Windows PowerShell) pour une utilisation interactive, un environnement de script sous-jacent pour exécuter des scripts loin de la ligne de commande et un environnement d'édition / débogage de script GUI (Windows PowerShell ISE). Voir: Premiers pas avec Windows PowerShell.

En tant que langue, powershella une syntaxe pour les tableaux littéraux et les tables de hachage, la prise en charge des expressions rationnelles, la correspondance des modèles et l'expansion des chaînes. Il est construit sur le framework .NET donc il prend en charge Unicode, peut être sensible aux paramètres régionaux / culture et peut accéder directement aux méthodes du framework .NET.

En tant que shell de ligne de commande, il est conçu autour d'applets de commande nommées sous la forme {Verbe} - {Noun}, dans le but que les mêmes types de commandes fonctionnent sur de nombreux domaines. Par exemple. Get-Date renvoie la date actuelle et Get-Process renvoie un tableau d'objets représentant des processus en cours qui peuvent être dirigés vers d'autres commandes qui fonctionnent avec des objets de processus. De nombreuses commandes et mots clés ont des alias courts pour réduire la saisie.

En tant qu'environnement de gestion système, les composants Windows et les produits Microsoft ont été étendus pour fournir des interfaces PowerShell natives dans le cadre de la création d'un système de gestion unifié pour les systèmes Windows, notamment:

Les fournisseurs tiers proposent également une intégration PowerShell, notamment:

powershellreprend l'idée Unix de canaliser le texte entre les programmes et de manipuler le texte, et l'améliore en canalisant les instances d'objets .NET autour. Étant donné que les objets contiennent des informations de type (par exemple, les dates et les heures) et un état complexe (par exemple, les propriétés et les méthodes, les tables de hachage, les données XML analysées et les sockets réseau en direct), cela facilite de nombreuses tâches qui seraient difficiles ou peu pratiques à faire en passant du texte entre les programmes. .

En plus d'interagir avec la console PowerShell ou PowerShell ISE, il existe également plusieurs options IDE tierces, notamment PrimalScript ISE Sapien.

Exemple d'utilisation

# List all processes using > 100 MB of PagedMemory in descending sort order (v3_
C:\PS> Get-Process | Where PagedMemorySize -GT 100MB | Sort -Descending

# PowerShell can handle numbers and arithmetic
C:\PS> (98.6 - 32) * 5/9
37

# Production orientation allows experimentation and confirmation
C:\PS> Get-ChildItem C:\Users\John *.bak -r |
           Where {$_.LastWriteTime -gt (Get-Date).AddDays(-7)} |
           Remove-Item -WhatIf
What if: Performing operation "Remove File" on Target "C:\Users\John\foo.bak"

C:\PS> Get-Process iexp* | Stop-Process -Confirm

Confirm
Are you sure you want to perform this action?
Performing operation "Stop-Process" on Target "iexplore (7116)".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is Y):

Gotchas communs

L'exécution de fichiers EXE via un chemin avec des espaces nécessite de citer le chemin et l'utilisation de l'opérateur d'appel - &

C:\PS> & 'C:\Program Files\Windows NT\Accessories\wordpad.exe'

L'appel de fonctions PowerShell ne nécessite pas de parenthèses ou d'arguments séparés par des virgules. Les fonctions PowerShell doivent être appelées comme une applet de commande. Les exemples suivants illustrent le problème causé par ce problème, par exemple:

C:\PS> function Greet($fname, $lname) {"My name is '$lname', '$fname' '$lname'"}
C:\PS> Greet('James','Bond') # Wrong way to invoke this function!!
My name is '', 'James Bond' ''

Notez que 'James' et 'Bond' sont empaquetés comme un seul argument (un tableau) qui est passé au premier paramètre. L'invocation correcte est:

C:\PS> Greet James Bond
My name is 'Bond', 'James' 'Bond'

Notez que dans PowerShell 2.0, l'utilisation de Set-StrictMode -version 2.0 détectera ce type de problème.

Profils PowerShell

Un autre problème courant lors du déplacement de fichiers d'une machine utilisateur vers un environnement de production est l'écart de paramètres de profil. La machine d'un utilisateur peut avoir un profile.ps1 défini dans ce dossier

%UserProfile%\Documents\WindowsPowerShell

Le fichier de profil est utilisé pour définir certaines commandes qui sont exécutées automatiquement avant d'exécuter un script. Les commandes courantes peuvent inclure l'ajout d'un composant logiciel enfichable PowerShell. Pour minimiser ce type de confusion entre les environnements, il est recommandé d'exécuter des tests avec la ligne de commande PowerShell via l'indicateur -NoProfile. Cela garantira que le script de profil n'est pas exécuté.

Vous trouverez plus d'informations sur les profils ici.

Fonctionnalités extensibles

L'une des grandes fonctionnalités de PowerShell est son extensibilité: nous pouvons ajouter des fonctionnalités en important des modules qui sont un ensemble d'applets de commande, de fonctions et d'alias spécialisés dans un domaine particulier (comme l'administration de bases de données, l'administration de machines virtuelles, etc.).

Voici les modules les plus utilisés par la communauté:

  • PSReadLine"PSReadLine remplace l'expérience d'édition de ligne de commande dans PowerShell.exe pour les versions 3 et supérieures." Inclus dans Windows 10.

  • Powertab"PowerTab propose une extension améliorée des onglets pour PowerShell."

  • PSCX"Les extensions de communauté PowerShell (PSCX) visent à fournir un ensemble largement utile de cmdlets, fournisseurs, alias, filtres, fonctions et des scripts pour Windows PowerShell pour lesquels les membres de la communauté ont manifesté leur intérêt mais n'ont pas encore été ajoutés à PowerShell. "

PowerShell Core

Depuis 2016, une version open source et multiplateforme (Windows, macOS et Linux) de PowerShell est en état alpha puis bêta. Atteindre la disponibilité générale en 2018, PowerShell Core est construit sur le .NET Core Framework. Les questions sur les fonctionnalités spécifiques à PowerShell Core doivent être étiquetées powershell-core.

Ressources