Uso dei repository PowerShellGet privatiWorking with Private PowerShellGet Repositories

Il modulo PowerShellGet supporta repository diversi da PowerShell Gallery.The PowerShellGet module support repositories other than the PowerShell Gallery. Questi cmdlet consentono gli scenari seguenti:These cmdlets enable the following scenarios:

  • Supporto di un set attendibile e pre-convalidato di moduli PowerShell per l'uso nell'ambienteSupport a trusted, pre-validated set of PowerShell modules for use in your environment
  • Test di una pipeline CI/CD che compila moduli o script PowerShellTesting a CI/CD pipeline that builds PowerShell modules or scripts
  • Distribuzione di moduli e script PowerShell in sistemi che non possono accedere a InternetDeliver PowerShell scripts and modules to systems that can't access the internet
  • Distribuzione di moduli e script PowerShell disponibili solo per l'organizzazioneDeliver PowerShell scripts and modules only available to your organization

Questo articolo descrive come configurare un repository PowerShell locale.This article describes how to set up a local PowerShell repository. L'articolo riguarda anche il modulo OfflinePowerShellGetDeploy disponibile in PowerShell Gallery.The article also covers the OfflinePowerShellGetDeploy module available from the PowerShell Gallery. Questo modulo contiene i cmdlet per installare la versione più recente di PowerShellGet nel repository locale.This module contains cmdlets to install the latest version of PowerShellGet into your local repository.

Tipi di repository localiLocal repository types

È possibile creare un repository PowerShell in due modi: Server NuGet o condivisione file.There are two ways to create a local PSRepository: NuGet server or file share. Ogni tipo presenta vantaggi e svantaggi.Each type has advantages and disadvantages:

Server NuGetNuGet Server

VantaggiAdvantages SvantaggiDisadvantages
Simula quasi perfettamente la funzionalità di PowerShell GalleryClosely mimics PowerShellGallery functionality L'app a più livelli richiede la pianificazione e il supporto delle operazioniMulti-tier app requires operations planning & support
NuGet si integra con Visual Studio e altri strumentiNuGet integrates with Visual Studio, other tools È necessario gestire il modello di autenticazione e gli account NuGetAuthentication model and NuGet accounts management needed
NuGet supporta i metadati in pacchetti .NupkgNuGet supports metadata in .Nupkg packages La pubblicazione richiede la gestione e la manutenzione delle chiavi APIPublishing requires API Key management & maintenance
Fornisce ricerca, amministrazione dei pacchetti e così via.Provides search, package administration, etc.

Condivisione fileFile Share

VantaggiAdvantages SvantaggiDisadvantages
Semplice da configurare, sottoporre a backup e gestireEasy to set up, back up, and maintain I metadati usati da PowerShellGet non sono disponibiliMetadata used by PowerShellGet isn't available
Modello di sicurezza semplice, autorizzazioni utente sulla condivisioneSimple security model - user permissions on the share Nessuna interfaccia utente oltre la condivisione file di baseNo UI beyond basic file share
Nessun vincolo, ad esempio la sostituzione degli elementi esistentiNo constraints such as replacing existing items Sicurezza limitata e nessuna registrazione degli utenti e degli aggiornamenti che eseguonoLimited security and no recording of who updates what

PowerShellGet è compatibile con entrambi i tipi e supporta l'individuazione delle versioni e l'installazione delle dipendenze.PowerShellGet works with either type and supports locating versions and dependency installation. Tuttavia, alcune funzionalità compatibili con PowerShell Gallery non sono disponibili per le condivisioni file o i server NuGet di base.However, some features that work for the PowerShell Gallery aren't available for base NuGet servers or file shares.

  • Tutti gli elementi sono costituiti da pacchetti, senza distinzione tra script, moduli, risorse DSC o funzionalità di ruoli.Everything is a package - no differentiation of scripts, modules, DSC resources, or role capabilities.
  • I server di condivisione file non possono visualizzare i metadati del pacchetto, inclusi i tag.File share servers can't see package metadata, including tags.

Creazione di un repository localeCreating a local repository

L'articolo seguente elenca i passaggi per la configurazione di un server NuGet personalizzato.The following article lists the steps for setting up your own NuGet Server.

Seguire i passaggi fino al momento dell'aggiunta di pacchetti.Follow the steps up to the point of adding packages. I passaggi per la pubblicazione di un pacchetto sono trattati più avanti in questo articolo.The steps for publishing a package are covered later in this article.

Per un repository basato su condivisione file, assicurarsi che gli utenti dispongano delle autorizzazioni per accedere alla condivisione file.For a file share-based repository, make sure that your users have permissions to access the file share.

Registrazione di un repository localeRegistering a local repository

Prima di poter usare un repository, è necessario registrarlo con il comando Register-PSRepository.Before a repository can be used, it must be registered using the Register-PSRepository command. Negli esempi seguenti, InstallationPolicy è impostato su Trusted , presupponendo che si ritenga attendibile il repository.In the examples below, the InstallationPolicy is set to Trusted , on the assumption that you trust your own repository.

# Register a NuGet-based server
Register-PSRepository -Name LocalPSRepo -SourceLocation http://MyLocalNuget/Api/V2/ -ScriptSourceLocation http://MyLocalNuget/Api/V2 -InstallationPolicy Trusted

# Register a file share on my local machine
Register-PSRepository -Name LocalPSRepo -SourceLocation '\\localhost\PSRepoLocal\' -ScriptSourceLocation '\\localhost\PSRepoLocal\' -InstallationPolicy Trusted

Notare la differenza nel modo in cui i due comandi gestiscono ScriptSourceLocation .Take note of the difference between how the two commands handle ScriptSourceLocation . Per repository basati su condivisione file, SourceLocation e ScriptSourceLocation devono corrispondere.For a file share-based repositories, the SourceLocation and ScriptSourceLocation must match. Per un repository basato sul Web, devono essere diversi, quindi in questo esempio viene aggiunto un carattere "/" finale a SourceLocation .For a web-based repository, they must be different, so in this example a trailing "/" is added to the SourceLocation .

Se si intende rendere predefinito il repository PowerShell appena creato, è necessario annullare la registrazione di tutti gli altri repository PowerShell.If you want the newly created PSRepository to be the default repository, you must unregister all other PSRepositories. Ad esempio:For example:

Unregister-PSRepository -Name PSGallery

Nota

Il nome di repository 'PSGallery' è riservato per l'uso da parte di PowerShell Gallery.The repository name 'PSGallery' is reserved for use by the PowerShell Gallery. È possibile annullare la registrazione di PSGallery, ma non è possibile riutilizzare il nome PSGallery per un altro repository.You can unregister PSGallery, but you cannot reuse the name PSGallery for any other repository.

Se è necessario ripristinare PSGallery, eseguire il comando seguente:If you need to restore the PSGallery, run the following command:

Register-PSRepository -Default

Pubblicazione in un repository localePublishing to a local repository

Dopo aver registrato il repository PowerShell locale, sarà possibile eseguire pubblicazioni al suo interno.Once you've registered the local PSRepository, you can publish to your local PSRepository. Esistono due scenari di pubblicazione principali: pubblicazione del proprio modulo e pubblicazione di un modulo da PSGallery.There are two main publishing scenarios: publishing your own module and publishing a module from the PSGallery.

Pubblicazione di un modulo creato dall'utentePublishing a module you authored

Usare Publish-Module e Publish-Script per pubblicare un modulo nel repository PowerShell locale con la stessa procedura valida per PowerShell Gallery.Use Publish-Module and Publish-Script to publish your module to your local PSRepository the same way you do for the PowerShell Gallery.

  • Specificare la posizione per il codiceSpecify the location for your code
  • Specificare una chiave APISupply an API key
  • Specificare il nome del repository.Specify the repository name. Ad esempio, usare -PSRepository LocalPSRepoFor example, -PSRepository LocalPSRepo

Nota

È necessario creare un account nel server NuGet, quindi eseguire l'accesso per generare e salvare la chiave API.You must create an account in the NuGet server, then sign in to generate and save the API key. Per una condivisione file, usare una stringa non vuota per il valore NuGetApiKey.For a file share, use any non-blank string for the NuGetApiKey value.

Esempi:Examples:

# Publish to a NuGet Server repository using my NuGetAPI key
Publish-Module -Path 'c:\projects\MyModule' -Repository LocalPsRepo -NuGetApiKey $nuGetApiKey

Importante

Per garantire la sicurezza, le chiavi API non devono essere hardcoded negli script.To ensure security, API keys should not be hard-coded in scripts. Usare un sistema di gestione delle chiavi sicuro.Use a secure key management system. Quando si esegue un comando manualmente, le chiavi API non devono essere passate come testo normale per evitare che vengano registrate. È possibile usare il cmdlet Read-Host per passare in modo sicuro il valore della chiave API.When executing a command manually, API keys should not be passed as plain-text to avoid it being logged, the Read-Host cmdlet can be used to safely pass the value of the API key.

# Publish to a file share repo - the NuGet API key must be a non-blank string
Publish-Module -Path 'c:\projects\MyModule' -Repository LocalPsRepo -NuGetApiKey 'AnyStringWillDo'

Pubblicazione di un modulo da PSGalleryPublishing a module from the PSGallery

Per pubblicare un modulo da PSGallery nel repository PowerShell locale, è possibile usare il cmdlet 'Save-Package'.To publish a module from the PSGallery to your local PSRepository, you can use the 'Save-Package' cmdlet.

Esempio:Example:

# Publish from the PSGallery to your local Repository
Save-Package -Name 'PackageName' -Provider NuGet -Source https://www.powershellgallery.com/api/v2 -Path '\\localhost\PSRepoLocal\'

Se il repository PowerShell locale è basato sul Web, è necessario un passaggio aggiuntivo che preveda l'uso di nuget.exe per eseguire la pubblicazione.If your local PSRepository is web-based, it requires an additional step that uses nuget.exe to publish.

Vedere la documentazione per l'uso di nuget.exe.See the documentation for using nuget.exe.

Installazione di PowerShellGet in un sistema disconnessoInstalling PowerShellGet on a disconnected system

La distribuzione di PowerShellGet è difficile in ambienti che richiedono sistemi disconnessi da Internet.Deploying PowerShellGet is difficult in environments that require systems to be disconnected from the internet. PowerShellGet include un processo bootstrap che installa la versione più recente al primo utilizzo.PowerShellGet has a bootstrap process that installs the latest version the first time it's used. Il modulo OfflinePowerShellGetDeploy in PowerShell Gallery include cmdlet che supportano questo processo di bootstrap.The OfflinePowerShellGetDeploy module in the PowerShell Gallery provides cmdlets that support this bootstrap process.

Per eseguire il bootstrap di una distribuzione offline, è necessario:To bootstrap an offline deployment, you need to:

  • Scaricare e installare OfflinePowerShellGetDeploy nel sistema connesso a Internet e nei sistemi disconnessiDownload and install the OfflinePowerShellGetDeploy your internet-connected system and your disconnected systems
  • Scaricare PowerShellGet e le relative dipendenze nel sistema connesso a Internet usando i cmdlet Save-PowerShellGetForOfflineDownload PowerShellGet and its dependencies on the internet-connected system using the Save-PowerShellGetForOffline cmdlet
  • Copiare PowerShellGet e le relative dipendenze dal sistema connesso a Internet al sistema disconnessoCopy PowerShellGet and its dependencies from the internet-connected system to the disconnected system
  • Usare Install-PowerShellGetOffline nel sistema disconnesso per posizionare PowerShellGet e le relative dipendenze nelle cartelle appropriateUse the Install-PowerShellGetOffline on the disconnected system to place PowerShellGet and its dependencies into the proper folders

I comandi seguenti usano Save-PowerShellGetForOffline per inserire tutti i componenti in una cartella f:\OfflinePowerShellGetThe following commands use Save-PowerShellGetForOffline to put all the components into a folder 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'

A questo punto, è necessario rendere il contenuto di F:\OfflinePowerShellGet disponibile per i sistemi disconnessi.At this point, you must make the contents of F:\OfflinePowerShellGet available to your disconnected systems. Eseguire il cmdlet Install-PowerShellGetOffline per installare PowerShellGet nel sistema disconnesso.Run the Install-PowerShellGetOffline cmdlet to install PowerShellGet on the disconnected system.

Nota

È importante non eseguire PowerShellGet nella sessione di PowerShell prima di eseguire questi comandi.It is important that you do not run PowerShellGet in the PowerShell session before running these commands. Una volta caricato PowerShellGet nella sessione, non sarà possibile aggiornare i componenti.Once PowerShellGet is loaded into the session, the components cannot be updated. Se si avvia PowerShellGet per errore, chiuderlo e riavviarlo.If you do start PowerShellGet by mistake, exit and restart PowerShell.

Import-Module F:\OfflinePowerShellGetDeploy

Install-PowerShellGetOffline -LocalFolder 'F:\OfflinePowerShellGet'

Dopo aver eseguito questi comandi, sarà possibile pubblicare PowerShellGet nel repository locale.After running these commands, you are ready to publish PowerShellGet to your local repository.

# Publish to a NuGet Server repository using my NuGetAPI key
Publish-Module -Path 'F:\OfflinePowershellGet' -Repository LocalPsRepo -NuGetApiKey $nuGetApiKey

Importante

Per garantire la sicurezza, le chiavi API non devono essere hardcoded negli script.To ensure security, API keys should not be hard-coded in scripts. Usare un sistema di gestione delle chiavi sicuro.Use a secure key management system. Quando si esegue un comando manualmente, le chiavi API non devono essere passate come testo normale per evitare che vengano registrate. È possibile usare il cmdlet Read-Host per passare in modo sicuro il valore della chiave API.When executing a command manually, API keys should not be passed as plain-text to avoid it being logged, the Read-Host cmdlet can be used to safely pass the value of the API key.

# Publish to a file share repo - the NuGet API key must be a non-blank string
Publish-Module -Path 'F:\OfflinePowerShellGet' -Repository LocalPsRepo -NuGetApiKey 'AnyStringWillDo'

Usare soluzioni di creazione pacchetti per ospitare repository PowerShellGetUse Packaging solutions to host PowerShellGet repositories

È anche possibile usare soluzioni di creazione pacchetti come Azure Artifacts per ospitare un repository PowerShellGet privato o pubblico.You can also use packaging solutions like Azure Artifacts to host a private or public PowerShellGet repository. Per altre informazioni e istruzioni, vedere la documentazione di Azure Artifacts.For more information and instructions, see the Azure Artifacts documentation.