Partager via


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 à Trustedvotre 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.