XXIX. PowerShell dans Windows XP▲
Ce chapitre est une traduction de la page http://commandwindows.com/powershell.htm dont l'auteur original est Victor Laurie.
Microsoft a introduit une interface de ligne de commande complètement nouvelle appelée "PowerShell". Ce chapitre décrit quelques nouvelles fonctionnalités.
XXIX-A. Introduction à PowerShell▲
Microsoft souhaitait à l'origine développer une nouvelle interface en ligne de commande (nom de code "Monad") intégrée à Vista. Cependant, il fut ensuite décidé de faire de la fonctionnalité (renommée "PowerShell") une application indépendante qui est maintenant disponible pour Windows XP. (La version pour Vista est également publiée et est disponible sur ce site. D'ailleurs, Vista possède encore l'interpréteur de commande cmd.exe, tout comme Windows XP). Le nouveau shell est la réponse de Microsoft au scripting shell Unix. Il est tout à fait différent de la précédente interface de ligne de commande et est considérablement plus puissant. Il utilise des techniques plus sophistiquées et les objets et il nécessite le Framework .NET 2.0. Il dispose de nouvelles fonctions pour les systèmes et l'administration réseau et est destiné aux professionnels IT. Parce que le but de cet article est de présenter la ligne de commande aux utilisateurs de PC, PowerShell dépasse un peu le cadre de cet article (et mon expérience personnelle). Néanmoins, je crois que l'utilisateur doit être conscient du potentiel de PowerShell et les plus expérimentés peuvent souhaiter l'explorer plus en détails. Je vais essayer de décrire brièvement ce qu'est PowerShell.
XXIX-B. Les fonctionnalités de PowerShell▲
Dans l'invite de commande précédemment décrite dans cet article, les commandes consistent en une série de commandes internes sous forme de chaînes de caractères qui sont interprétées et exécutées par l'interpréteur de commandes ou de commandes invoquant des fichiers exécutables séparés. PowerShell a une nouvelle approche qui permet l'utilisation de ce que Microsoft appelle des "cmdlets". Voici la description de Microsoft : "Une cmdlet (pronnoncez "command-let") est une commande à fonction unique qui manipule des objets dans Windows PowerShell. Vous pouvez reconnaitre les cmdlets par leur format de nom -- un verbe et un nom séparés par un tiret (-), comme Get-Help, Get-Process, et Start-Service."
Bien que chaque cmdlet ait une fonction unique, des groupes de cmdlets peuvent être reliés ensemble pour mener à bien une tâche complexe. Le résultat de plusieurs cmdlets pourra également être utilisé comme entrée d'autres cmdlets (par un "pipe") sans traitement supplémentaire. Ces possibilités nouvelles représentent une avancée significative par rapport à la console de lignes de commandes.
PowerShell continue à reconnaître les commandes provenant de l'ancienne console de commande bien que, dans plusieurs cas, la commande soit un alias d'une cmdlet PowerShell.
XXIX-B-1. Liste de cmdlets▲
Pour l'instant, PowerShell est fourni avec 129 cmdlets. Comme les cmdlets sont faciles à écrire, on peut s'attendre à ce que ce nombre augmente. Le tableau I indique celles présentes à la date d'écriture de ce document.
Tableau I. Liste des cmdlets PowerShell
Add-Content Add-History Add-Member Add-PSSnapin Clear-Content Clear-Item Clear-ItemProperty Clear-Variable Compare-Object ConvertFrom-SecureString Convert-Path ConvertTo-Html ConvertTo-SecureString Copy-Item Copy-ItemProperty Export-Alias Export-Clixml Export-Console Export-Csv ForEach-Object Format-Custom Format-List Format-Table Format-Wide Get-Acl Get-Alias Get-AuthenticodeSignature Get-ChildItem Get-Command Get-Content Get-Credential Get-Culture |
Get-Date Get-EventLog Get-ExecutionPolicy Get-Help Get-History Get-Host Get-Item Get-ItemProperty Get-Location Get-Member Get-PfxCertificate Get-Process Get-PSDrive Get-PSProvider Get-PSSnapin Get-Service Get-TraceSource Get-UICulture Get-Unique Get-Variable Get-WmiObject Group-Object Import-Alias Import-Clixml Import-Csv Invoke-Expression Invoke-History Invoke-Item Join-Path Measure-Command Measure-Object Move-Item |
Move-ItemProperty New-Alias New-Item New-ItemProperty New-Object New-PSDrive New-Service New-TimeSpan New-Variable Out-Default Out-File Out-Host Out-Null Out-Printer Out-String Pop-Location Push-Location Read-Host Remove-Item Remove-ItemProperty Remove-PSDrive Remove-PSSnapin Remove-Variable Rename-Item Rename-ItemProperty Resolve-Path Restart-Service Resume-Service Select-Object Select-String Set-Acl Set-Alias |
Set-AuthenticodeSignature Set-Content Set-Date Set-ExecutionPolicy Set-Item Set-ItemProperty Set-Location Set-PSDebug Set-Service Set-TraceSource Set-Variable Sort-Object Split-Path Start-Service Start-Sleep Start-Transcript Stop-Process Stop-Service Stop-Transcript Suspend-Service Tee-Object Test-Path Trace-Command Update-FormatData Update-TypeData Where-Object Write-Debug Write-Error Write-Host Write-Output Write-Progress Write-Verbose Write-Warning |
XXIX-B-2. Syntaxe des cmdlets▲
Il existe un certain nombre de paramètres possibles pour les cmdlets mais une description détaillée de leur syntaxe sortirait du cadre de cet article. Je vais essayer de vous montrer l'éventail des possibilités offertes en vous décrivant une cmdlet utile qui effectue la fonction de copie. Elle n'est pas limitée à la copie de fichiers et dossiers mais peut également copier des clés et entrées du Registre. Cette cmdlet, en fait, incorpore les fonctions de plusieurs anciennes commandes avec une plus grande souplesse. Tout d'abord, voyons un exemple où un dossier et tout son contenu doivent être copiés :
Copy-Item C:\Logfiles -destination D:\Backup -recurse
Cette cmdlet copie tous les fichiers et sous-dossiers du dossier C:\Logfiles dans le dossier D:\Backup. Le paramètre "-recurse" est utilisé quand les sous-dossiers doivent être copiés.
Voyons maintenant tous les paramètres :
Copy-Item [-path] (string[]) [[-destination] (string)] [-container] [-recurse] [-force] [-include (string[])] [-exclude (string[])]
[-filter (string)] [-passThru] [-credential (PSCredential)] [-whatIf] [-confirm] [(CommonParameters)]
Naturellement, l'ensemble complet des paramètres varie d'une cmdlet à une autre mais l'intriguant paramètre "-whatIf" est commun à toutes. Cette option décrit ce qui devrait se passer si vous exécutiez la commande mais sans l'exécuter réellement. Cela vous permet de voir en toute sécurité ce qui se passerait si vous utilisiez la commande. Pour un tableau décrivant les différents paramètres indiqués ci-dessus, cliquez ici.
XXIX-C. Scripting PowerShell▲
PowerShell est aussi la base d'un langage de script. Un aperçu des opérateurs et fonctions disponibles est accessible dans cette référence MSDN. Ce langage est prévu pour rendre les tâches administratives plus faciles et semble destiné à supplanter VBScript dans le futur. L'extension pour les scripts PowerShell est .PS1. Plusieurs fonctionnalités de sécurités sont intégrées au moteur de script et le réglage par défaut est d'empêcher l'exécution des scripts. La permission d'exécuter les scripts est contrôlée par une fonctionnalité appelée "Execution Policy". Vous pouvez obtenir des informations sur cette fonctionnalité avec la commande PowerShell
Get-Help about_signing
Vous trouverez plus d'informations sur le scripting PowerShell sur ce site Microsoft
XXIX-D. Plus d'informations▲
Dans cette courte description de PowerShell, nous n'avons fait qu'en effleurer la surface. Pour ceux qui souhaitent explorer plus profondément le sujet, voici une liste de références :