Utilisation des référentiels PowerShellGet privés
Le module PowerShellGet prend en charge des référentiels autres que PowerShell Gallery. Ces cmdlets gèrent les cas suivants :
- prise en charge d’un ensemble approuvé et prévalidé de modules PowerShell dans l’environnement ;
- test d’un pipeline CI/CD qui génère des modules ou des scripts PowerShell ;
- envoi de scripts et de modules PowerShell aux systèmes qui n’ont pas accès à Internet.
- Fournir des scripts et des modules PowerShell accessibles uniquement à votre organisation
Cet article explique comment configurer un référentiel PowerShell local. Il aborde également le module OfflinePowerShellGetDeploy disponible sur PowerShell Gallery. Ce module contient des cmdlets permettant d’installer la dernière version de PowerShellGet dans un référentiel local.
Types de référentiels locaux
Il existe deux moyens de créer un PSRepository local : un serveur NuGet ou un partage de fichiers. Chacun présente des avantages et des inconvénients :
Serveur NuGet
Avantages | Inconvénients |
---|---|
Imite la fonctionnalité PowerShellGallery | Application multiniveau exigeant planification des opérations et support |
Intégration de NuGet à Visual Studio, autres outils | Modèle d’authentification et gestion des comptes NuGet nécessaires |
NuGet prend en charge les métadonnées dans les packages .Nupkg |
Gestion de clés API et maintenance nécessaires à la publication |
Fonctionnalités de recherche, d’administration de packages, etc. |
Partage de fichiers
Avantages | Inconvénients |
---|---|
Facilité de configuration, de sauvegarde et de maintenance | Pas d’interface utilisateur au-delà du partage de fichiers de base |
Simplicité du modèle de sécurité (autorisations utilisateur sur le partage) | Sécurité limitée et pas d’enregistrement de l’auteur des mises à jour |
Pas de contraintes comme le remplacement des éléments existants |
PowerShellGet fonctionne avec les deux types et prend en charge la localisation des versions et l’installation des dépendances. Toutefois, certaines fonctionnalités compatibles avec PowerShell Gallery ne sont pas disponibles pour les partages de fichiers et les serveurs NuGet de base. Il n’existe aucune différenciation des scripts, des modules, des ressources DSC ou des fonctionnalités de rôle.
Création d’un dépôt NuGet.Server
L’article suivant présente les étapes de configuration d’un serveur NuGet.
Suivez les étapes jusqu’à l’ajout de packages. La procédure de publication d’un package est traitée plus loin dans cet article.
Dans le cas d’un référentiel sur partage de fichiers, vérifiez que vos utilisateurs disposent des autorisations nécessaires pour accéder au partage de fichier.
Inscrire un référentiel local
Un référentiel doit être inscrit à l’aide de la commande Register-PSRepository
pour être utilisable. Dans les exemples ci-dessous, InstallationPolicy est défini sur , en supposant que vous faites confiance à Trusted
votre propre dépôt.
# Register a NuGet-based server
$registerPSRepositorySplat = @{
Name = 'LocalPSRepo'
SourceLocation = 'http://MyLocalNuget/Api/V2/'
ScriptSourceLocation = 'http://MyLocalNuget/Api/V2'
InstallationPolicy = 'Trusted'
}
Register-PSRepository @registerPSRepositorySplat
# Register a file share on my local machine
$registerPSRepositorySplat = @{
Name = 'LocalPSRepo'
SourceLocation = '\\localhost\PSRepoLocal\'
ScriptSourceLocation = '\\localhost\PSRepoLocal\'
InstallationPolicy = 'Trusted'
}
Register-PSRepository @registerPSRepositorySplat
Remarquez la différence entre les deux commandes en matière de gestion de ScriptSourceLocation. Pour les référentiels sur partage de fichiers, SourceLocation et ScriptSourceLocation doivent correspondre. Dans le cas d’un référentiel web, ils doivent être différents : dans cet exemple, une barre oblique « / » de fin est ajoutée à SourceLocation.
Lorsque vous utilisez un protocole de partage de fichiers, comme NFS ou SMB, veillez à suivre les instructions recommandées pour sécuriser le protocole. Pour plus d’informations sur la sécurisation de SMB sur Windows, consultez [Améliorations de sécurité SMB][09].
Pour que le nouveau PSRepository soit le référentiel par défaut, il faut annuler l’inscription de tous les autres PSRepository. Par exemple :
Unregister-PSRepository -Name PSGallery
Notes
Le nom de référentiel « PSGallery » est réservé à PowerShell Gallery. Vous pouvez annuler l’inscription de PSGallery, mais vous ne pouvez pas réutiliser le nom PSGallery pour un autre dépôt.
Si vous devez restaurer PSGallery, exécutez la commande suivante :
Register-PSRepository -Default
Publier sur un référentiel local
Vous pouvez publier sur votre PSRepository local dès qu’il est inscrit. Il existe deux grands scénarios de publication : votre propre module ou un module provenant de PSGallery.
Publier un module créé par vos soins
Utilisez Publish-Module
et Publish-Script
pour publier votre module sur votre PSRepository local, comme sur PowerShell Gallery.
- Spécifiez l’emplacement de votre code.
- Indiquez une clé API.
- Spécifiez le nom du référentiel. Par exemple :
-PSRepository LocalPSRepo
Notes
Vous devez créer un compte dans le serveur NuGet, puis vous connecter pour générer et enregistrer la clé API. Pour un partage de fichiers, utilisez une chaîne non vide comme valeur NuGetApiKey.
Exemples :
# Publish to a NuGet Server repository using my NuGetAPI key
$publishModuleSplat = @{
Path = 'c:\projects\MyModule'
Repository = 'LocalPsRepo'
NuGetApiKey = $nuGetApiKey
}
Publish-Module @publishModuleSplat
Important
Pour garantir la sécurité, les clés API ne doivent pas être codées en dur dans des scripts. Utilisez un système de gestion de clés sécurisé. Lors de l’exécution manuelle d’une commande, les clés API ne doivent pas être passées en texte brut pour éviter qu’elle ne soit journalisée. L’applet Read-Host
de commande peut être utilisée pour transmettre en toute sécurité la valeur de la clé API.
# Publish to a file share repo - the NuGet API key must be a non-blank string
$publishModuleSplat = @{
Path = 'c:\projects\MyModule'
Repository = 'LocalPsRepo'
NuGetApiKey = 'AnyStringWillDo'
}
Publish-Module @publishModuleSplat
Publier un module provenant de PSGallery
Pour publier un module à partir de PSGallery dans votre PSRepository local, vous pouvez utiliser l’applet de Save-Package
commande .
- Spécifiez le nom du package.
- Spécifiez « NuGet » comme fournisseur.
- Spécifiez l’emplacement de PSGallery comme source (
https://www.powershellgallery.com/api/v2
) - Spécifiez le chemin de votre référentiel local.
Exemple :
# Publish from the PSGallery to your local Repository
$savePackageSplat = @{
Name = 'PackageName'
ProviderName = 'NuGet'
Source = 'https://www.powershellgallery.com/api/v2'
Path = '\\localhost\PSRepoLocal\'
}
Save-Package @savePackageSplat
Si votre PSRepository local est basé sur le web, il nécessite une étape supplémentaire qui utilise nuget.exe
pour publier. Voir la documentation sur nuget.exe.
Installer PowerShellGet sur un système déconnecté
Il est difficile de déployer PowerShellGet dans des environnements où les systèmes doivent être déconnectés d’Internet. PowerShellGet comporte un processus de démarrage qui installe la dernière version la première fois qu’il est utilisé. Le module OfflinePowerShellGetDeploy de PowerShell Gallery fournit des cmdlets qui gèrent ce processus de démarrage.
Pour démarrer un déploiement hors connexion :
- Téléchargez et installez OfflinePowerShellGetDeploy sur votre système connecté à Internet et vos systèmes déconnectés.
- Téléchargez PowerShellGet et ses dépendances sur le système connecté à Internet avec la cmdlet
Save-PowerShellGetForOffline
. - Copiez PowerShellGet et ses dépendances du système connecté à Internet au système déconnecté.
- Utilisez
Install-PowerShellGetOffline
sur le système déconnecté pour placer PowerShellGet et ses dépendances dans les dossiers correspondants.
Les commandes suivantes utilisent Save-PowerShellGetForOffline
pour placer tous les composants dans un dossier f:\OfflinePowerShellGet
.
# Requires -RunAsAdministrator
#Download the OfflinePowerShellGetDeploy to a location that can be accessed
# by both the connected and disconnected systems.
Save-Module -Name OfflinePowerShellGetDeploy -Path 'F:\' -Repository PSGallery
Import-Module F:\OfflinePowerShellGetDeploy
# Put PowerShellGet somewhere locally
Save-PowerShellGetForOffline -LocalFolder 'F:\OfflinePowerShellGet'
Rendez maintenant le contenu de F:\OfflinePowerShellGet
accessible à vos systèmes déconnectés. Exécutez la cmdlet Install-PowerShellGetOffline
pour installer PowerShellGet sur le système déconnecté.
Notes
Il est important de ne pas exécuter PowerShellGet dans la session PowerShell avant d’exécuter ces commandes. Une fois PowerShellGet chargé dans la session, les composants ne peuvent pas être mis à jour. Si vous lancez PowerShellGet par erreur, quittez et redémarrez PowerShell.
Import-Module F:\OfflinePowerShellGetDeploy
Install-PowerShellGetOffline -LocalFolder 'F:\OfflinePowerShellGet'
Une fois que vous avez exécuté ces commandes, vous pouvez publier PowerShellGet dans votre référentiel local.
# Publish to a NuGet Server repository using my NuGetAPI key
$publishModuleSplat = @{
Path = 'F:\OfflinePowershellGet'
Repository = 'LocalPsRepo'
NuGetApiKey = $nuGetApiKey
}
Publish-Module @publishModuleSplat
Important
Pour garantir la sécurité, les clés API ne doivent pas être codées en dur dans des scripts. Utilisez un système de gestion de clés sécurisé. Lors de l’exécution manuelle d’une commande, les clés API ne doivent pas être passées en texte brut pour éviter qu’elle ne soit journalisée. L’applet Read-Host
de commande peut être utilisée pour transmettre en toute sécurité la valeur de la clé API.
# Publish to a file share repo - the NuGet API key must be a non-blank string
$publishModuleSplat = @{
Path = 'F:\OfflinePowerShellGet'
Repository = 'LocalPsRepo'
NuGetApiKey = 'AnyStringWillDo'
}
Publish-Module @publishModuleSplat
Utiliser des solutions de packaging pour héberger des référentiels PowerShellGet
Vous pouvez également utiliser des solutions de packaging comme Azure Artifacts pour héberger un référentiel PowerShellGet privé ou public. Pour obtenir des informations complémentaires et des instructions, consultez la documentation Azure Artifacts.
PowerShell Gallery