Andrey Popov - stock.adobe.com
Windows : préférez PSResourceGet pour mieux gérer PowerShell
La nouvelle mouture du gestionnaire de paquets pour PowerShell améliore les performances, simplifie les modules et rationalise les référentiels, ce qui libère du temps pour en consacrer davantage aux tâches d'automatisation.
La gestion des ressources PowerShell est une tâche essentielle pour les administrateurs, qui doivent s'assurer que les scripts et les modules sont à jour et correctement configurés dans tous les environnements. Avec la sortie de PSResourceGet, Microsoft a amélioré le module PowerShellGet d'origine en proposant une approche modernisée de la gestion des ressources PowerShell.
Cet article examine certaines des limites de PowerShellGet, les problèmes résolus par PSResourceGet et ses principales fonctionnalités, ainsi que des exemples concrets d’utilisation de PSResourceGet dans les flux quotidiens.
Les problèmes que PSResourceGet résout
Aussi utile que soit PowerShellGet, PSResourceGet a été développé pour répondre à plusieurs problèmes majeurs, notamment :
- Problèmes de complexité et de performances. Microsoft a conçu PowerShellGet selon un modèle d’extension du module PackageManagement, ce qui a entraîné des goulets d'étranglement et une complexité accrue dans la gestion des dépendances.
- Convivialité et extensibilité. Comme il reposait sur une base de code plus ancienne, PowerShellGet n'était ni convivial ni facile à étendre, ce qui rendait difficiles la correction des bugs et la mise en œuvre de nouvelles fonctionnalités.
- Problèmes de compatibilité. Étant donné qu’il était lui-même écrit en PowerShell, il était difficile de maintenir la compatibilité de PowerShellGet avec toutes les versions de PowerShell qu’une entreprise peut déployer sur ordinateurs.
En réécrivant le remplaçant de PowerShellGet en langage C# et en supprimant sa dépendance vis-à-vis de PackageManagement, PSResourceGet offre une approche plus efficace et plus facile à maintenir.
Les fonctionnalités de PSResourceGet
En tant que nouveau gestionnaire de paquets pour PowerShell, PSResourceGet est un outil complet permettant de gérer tous les types d’éléments PowerShell disponibles dans les référentiels, notamment les modules, les scripts, les ressources de configuration d’état souhaité (Desired State Configuration) et les capacités de rôle.
Pour chaque type de ressource, PSResourceGet permet aux administrateurs de :
- Installer, de mettre à jour et de supprimer des ressources ;
- Gérer automatiquement les dépendances ;
- Gérer les référentiels fournissant des ressources ;
- Rechercher des ressources dans les référentiels.
Toutes ces fonctionnalités sont accessibles dans le module via des cmdlets.
Les avantages de PSResourceGet
Maintenant que nous avons présenté l'objectif de PSResourceGet et ses fonctionnalités, voyons les avantages de l'utilisation de PSResourceGet par rapport à PowerShellGet.
Performances améliorées. L'avantage le plus significatif et immédiat de PSResourceGet est sa rapidité. Par exemple, le script suivant compare les performances de recherche des deux modules :
Measure-Command {
Find-Module -Name Microsoft.PowerShell.PSResourceGet
} | Select-Object TotalSeconds
Measure-Command {
Find-PSResource -Name Microsoft.PowerShell.PSResourceGet
} | Select-Object TotalSeconds
Après avoir exécuté ces commandes à plusieurs reprises, PSResourceGet s'avère généralement deux fois plus rapide que PowerShellGet. Les résultats peuvent varier en fonction de l'environnement de test, notamment de la machine hôte et de la connexion Internet.
Compatibilité. Afin de garantir la compatibilité avec les versions antérieures de PowerShellGet, Microsoft a publié un module de compatibilité conçu pour accepter les commandes dans la même syntaxe que PowerShellGet et appeler les commandes PSResourceGet équivalentes. Cette approche permet aux administrateurs de continuer à exécuter des scripts utilisant la syntaxe de PowerShellGet tout en bénéficiant des améliorations apportées à PSResourceGet.
Facilité de maintenance et extensibilité. Bien que cela ne soit pas forcément perceptible d’emblée pour la plupart des utilisateurs, l’un des objectifs de PSResourceGet était de créer un module permettant d’intégrer facilement des modifications en fonction des retours des clients. Dès le départ, le code a été écrit de manière claire et efficace afin que Microsoft puisse rapidement corriger les bogues et répondre aux demandes de nouvelles fonctionnalités.
Utilisation de PSResourceGet
Pour commencer à utiliser PSResourceGet, vous devrez peut-être l'installer. Pour toutes les versions de PowerShell antérieures à la version 7.4, PSResourceGet n'est pas inclus par défaut ; nous utiliserons donc la cmdlet Install-Module de PowerShellGet pour l'installation :
Install-Module -Name Microsoft.PowerShell.PSResourceGet
Une fois l'installation terminée, vous pouvez vérifier que tout fonctionne correctement en important le module, en exécutant une commande à partir de celui-ci ou simplement en affichant la liste des commandes disponibles dans le module :
Get-Command -Module Microsoft.PowerShell.PSResourceGet
Gestion des référentiels. Un référentiel est un emplacement permettant de publier des ressources PowerShell et de les récupérer. Le plus connu est la PowerShell Gallery. À l'aide de la commande PSResourceGet, vous pouvez répertorier les référentiels actuellement configurés :
Get-PSResourceRepository
Par défaut, PowerShell n'intègre que la PowerShell Gallery. Pour ajouter d'autres référentiels, tels qu'un référentiel privé interne hébergé sur GitHub, utilisez le code suivant :
$splat = @{
Name = 'GitHubOrg'
Uri = 'https://nuget.pkg.github.com/<GitHubOrg>/index.json'
Trusted = $true
Priority = 10
}
Register-PSResourceRepository @splat
Dans ce cas, le script désigne le référentiel comme fiable et lui attribue une priorité supérieure à celle de la PowerShell Gallery.
Vous pouvez vérifier cette modification en réexécutant la commande Get-PSResourceRepository.
Pour consulter la liste complète des types de référentiels pris en charge, vous pouvez vous reporter à la documentation de Microsoft.
Installation de modules. PSResourceGet est le plus souvent utilisé pour installer des modules. Son fonctionnement est très similaire à celui de la commande Install-Module, mais il faut utiliser la commande suivante :
Install-PSResource -Name Microsoft.Graph
Si vous souhaitez installer une version spécifique, PSResourceGet offre beaucoup plus de souplesse que PowerShellGet. Le paramètre Version accepte n'importe quelle plage de versions NuGet valide, tandis que PowerShellGet exigeait trois paramètres de version. Par exemple, pour installer une version précise, utilisez la commande suivante :
Install-PSResource -Name Microsoft.Graph -Version 2.21.0
Pour définir une plage de versions, par exemple supérieure à 1.5 mais inférieure à 2.0, vous pouvez utiliser :
Install-PSResource -Name Microsoft.Graph -Version '[1.5,2.0)'
Pour vérifier votre plage de versions, utilisez la commande Find-PSResource.
PSResourceGet installera la dernière version figurant dans la plage indiquée.
Installation de modules sur plusieurs serveurs. Pour vous assurer que l'ensemble de l'environnement dispose des modules appropriés, vous pouvez utiliser PSResourceGet via l'exécution à distance de PowerShell. Par exemple, pour gérer les mises à jour Windows, vous pouvez installer le module PSWindowsUpdate. Le script suivant - qui nécessite PowerShell v7 car il utilise le paramètre Parallel de Foreach-Object - récupère une liste de serveurs à partir d'Active Directory, puis installe le module à distance :
Get-ADComputer -Filter 'OperatingSystem -like "*Server*"' | ForEach-Object -ThrottleLimit 5 -Parallel {
Invoke-Command -ComputerName $_.Name -ScriptBlock {
Install-Module -Name Microsoft.PowerShell.PSResourceGet -Confirm:$false -Force
Install-PSResource -Name PSWindowsUpdate -Confirm:$false
}
}
Le script installera PSResourceGet s'il n'est pas déjà installé via Install-Module, puis il installera PSWindowsUpdate à l'aide de Install-PSResource.
Naviguez depuis la ligne de commande. PSResourceGet étant bien plus rapide que PowerShellGet, il est plus judicieux de parcourir la PowerShell Gallery depuis la ligne de commande. Par exemple, si vous savez qu'il existe un module permettant d'importer des fichiers Excel mais que vous ne vous souvenez plus de son nom, vous pouvez le rechercher :
Find-PSResource -Name '*Excel'
Cette commande renvoie plusieurs modules, dont l'un est ImportExcel. Pour consulter l'intégralité des métadonnées de ce module, interrogez-le directement :
Find-PSResource -Name 'ImportExcel' | fl *
La sortie affiche des informations importantes, telles que la propriété ProjectUri, que vous pouvez utiliser pour vérifier qu'il s'agit bien du module souhaité.
PSResourceGet améliore la gestion des paquets dans PowerShell, en offrant une vitesse et une fiabilité accrues. En tenant directement compte des retours des utilisateurs et des problèmes rencontrés avec PowerShellGet, PSResourceGet propose une approche plus rationalisée et plus efficace pour réduire le temps consacré aux tâches répétitives et permettre de consacrer davantage de temps à l'automatisation et à la création de scripts.
Cet article est initialement paru en anglais sur TechTarget.com, une publication sœur du MagIT.
