Microsoft PowerShell est une excellente plateforme de scripting. Microsoft fournit un support PowerShell pour presque tous les rôles et fonctionnalités de Windows Server. Vous pouvez utiliser PowerShell pour automatiser des tâches répétées ainsi que pour effectuer facilement à l’aide de la ligne de commande des tâches que vous effectuez habituellement à l’aide des outils GUI. Par exemple, dans un environnement de production, si vous devez vérifier l’état des correctifs sur les serveurs Windows, il est beaucoup plus facile d’utiliser l’approche du script PowerShell que de se connecter à chaque serveur individuellement et de vérifier ensuite l’état des correctifs. Je suis un utilisateur régulier de PowerShell et j’ai conçu des milliers de scripts PowerShell au cours de mes 18 années d’expérience en informatique.
Avant PowerShell, le principal langage de script pour effectuer des tâches opérationnelles Windows était Visual Basic Scripting. Bien que Visual Basic Scripting existe toujours et que de nombreux administrateurs informatiques préfèrent encore utiliser le script VB, il convient de mentionner que PowerShell réduit la complexité du code. Par exemple, pour vérifier les services d’un ordinateur Windows, vous devez écrire le code VBScript dans un bloc-notes, enregistrer le fichier en tant que .VBS, puis l’exécuter à l’aide du fichier d’exécution hôte CSCript. Mais en utilisant PowerShell, vous pouvez utiliser une simple cmdlet Get-Service qui peut vous aider à lister rapidement les services d’un ordinateur Windows. Si vous aviez besoin d’enregistrer la sortie dans un fichier à l’aide d’un script VB, vous devrez à nouveau écrire un tas de code dans le script VB, ce qui implique d’ouvrir le fichier, puis d’écrire le contenu dans le fichier. PowerShell ne vous oblige pas à ouvrir le fichier avant que le contenu récupéré par une cmdlet PowerShell puisse être écrit dans un fichier. Il vous suffit d’utiliser les cmdlets « Export-CSV » ou « Add-Content ».
Cmdlets : Les blocs de construction des scripts PowerShell
PowerShell offre des cmdlets (prononcer « command-lets »), parfois appelés outils de ligne de commande, que vous pouvez utiliser pour obtenir des informations sur le système d’exploitation, les applications installées sur un ordinateur Windows, des informations sur le réseau, l’état des correctifs sur l’ordinateur Windows, et bien plus encore. Il est important de noter que les cmdlets PowerShell sont écrits en .NET et utilisent des classes .NET pour effectuer les tâches requises. Si vous souhaitez connaître les cmdlets PowerShell disponibles sur l’ordinateur local, exécutez cette commande :
Get-Command
Get-Command est une cmdlet PowerShell qui récupère les cmdlets, les fonctions, les filtres et les scripts PowerShell installés sur l’ordinateur local. La commande ci-dessus interroge tous les modules PowerShell installés sur l’ordinateur local. Si vous devez voir toutes les commandes installées sur l’ordinateur local dans un ordre, exécutez cette commande:
Get-Command -Type cmdlet | Sort-Object -Property Noun |FT -GroupBy Noun
Trois types d’opérations PowerShell
En utilisant PowerShell, vous pouvez effectuer trois types d’opérations. Il s’agit de Get, Set et Remove. Toute cmdlet PowerShell qui commence par « Get » est généralement utilisée pour récupérer des informations à partir de composants Windows. Par exemple, Get-ADUser effectue une opération de lecture dans la base de données Active Directory pour récupérer les informations sur les utilisateurs. Quelques exemples d’utilisation de la cmdlet PowerShell Get-ADUser sont présentés ci-dessous :
Get-ADUser -Filter * -SearchBase « OU=TestUsers,DC=TechGenix,DC=Com »
La commande ci-dessus récupère tous les comptes d’utilisateurs situés dans une unité d’organisation alors que la commande ci-dessous récupère les propriétés associées à un seul utilisateur Active Directory :
Get-ADUser -Identity JohnThomas -Properties *
Les cmdlets PowerShell qui commencent par « Set » sont utilisés pour modifier les informations des composants Windows. Par exemple, en utilisant Set-ADUser, vous pouvez diverses tâches opérationnelles, comme le montrent les commandes ci-dessous :
Set-ADUser -Identity JohnThomas -HomeFolder \\\NServer1\%UserName%
Les commandes ci-dessous définissent la propriété de messagerie pour l’utilisateur JohnThomas.
$ThisUser = Get-ADUser -Identity JohnThomas -Properties Mail
$ThisUser.Mail = [email protected]
Set-ADUser -Instance $ThisUser
Toutes les cmdlets PowerShell qui commencent par « Remove » sont utilisées pour effectuer des opérations de suppression. Par exemple, Remove-ADUser peut être utilisé pour supprimer un utilisateur Active Directory comme indiqué ci-dessous :
Remove-ADUser -Identity JohnThomas
Combinaison de cmdlets PowerShell
L’une des meilleures fonctionnalités offertes par PowerShell est la possibilité de combiner deux ou plusieurs cmdlets PowerShell dans une seule commande PowerShell. De telles commandes sont parfois appelées des commandes PowerShell en une seule ligne. Par exemple, si vous devez supprimer tous les comptes d’utilisateur désactivés d’Active Directory, vous pouvez combiner les cmdlets PowerShell Search-ADAccount et Remove-ADUser comme indiqué dans la commande ci-dessous :
Search-ADAccount -AccountDisabled | Where {$_.ObjectClass -eq « User »} | Remove-ADUser
Comme vous pouvez le voir dans la commande ci-dessus, le cmdlet PowerShell Search-ADAccount effectue une recherche dans tout active directory pour rechercher les comptes désactivés et ensuite, en utilisant l’opérateur pipe (|), vous donnez l’instruction au Remove-ADUser d’effectuer une opération de suppression uniquement sur les utilisateurs qui sont récupérés par le Search-ADAccount.
PowerShell alias
Bien que de nombreuses cmdlets PowerShell soient faciles à lire et à utiliser, PowerShell fournit également une fonctionnalité appelée PowerShell alias. PowerShell est suffisamment intelligent pour compléter le nom d’une cmdlet PowerShell en appuyant sur la touche Tab. Si vous avez des difficultés à vous souvenir du nom des cmdlets PowerShell, vous pouvez créer des alias PowerShell. Par exemple, vous pouvez créer un alias pour la cmdlet PowerShell Get-MailBoxStatistics en utilisant la commande ci-dessous :
New-Alias ShowMB Get-MailBoxStatistics
Lorsque vous tapez « ShowMB » dans la fenêtre PowerShell, PowerShell recherche la cmdlet associée à l’alias ShowMB puis l’exécute.
Enregistrement des informations dans un fichier CSV
Lorsqu’il s’agit d’enregistrer des informations dans un fichier CSV, PowerShell économise beaucoup de travail de script. PowerShell fournit la cmdlet « Export-CSV » que vous pouvez utiliser avec n’importe quelle autre cmdlet PowerShell. Par défaut, toute commande PowerShell que vous exécutez affiche les informations résultantes dans la fenêtre de commande PowerShell, à moins que vous n’ajoutiez Export-CSV à la fin de la commande, comme indiqué dans la commande ci-dessous :
Get-ADUser -Filter * -SearchBase « OU=TestUsers,DC=TechGenix,DC=Com » | Export-CSV C:\Temp\AllUsersInAnOU.CSV
Notez que dans la commande ci-dessus, vous ajoutez simplement « Export-CSV » à la fin de la commande pour que la sortie soit exportée dans un fichier CSV.
Comme vous pouvez le constater, les scripts PowerShell réduisent le temps nécessaire à l’exécution des tâches opérationnelles quotidiennes. PowerShell est capable d’effectuer trois tâches opérationnelles ; Get, Set et Remove et 97 % des cmdlets PowerShell commencent par ces trois mots pour identifier facilement la fonction d’un cmdlet PowerShell. Nous avons également expliqué comment il est facile de combiner deux cmdlets en une seule commande pour rendre vos scripts PowerShell plus efficaces.