Arbeta med privata PowerShellGet-lagringsplatser

PowerShellGet-modulen stöder andra lagringsplatser än PowerShell-galleriet. Dessa cmdletar möjliggör följande scenarier:

  • Stöd för en betrodd, förvald uppsättning PowerShell-moduler för användning i din miljö
  • Testa en CI/CD-pipeline som skapar PowerShell-moduler eller skript
  • Leverera PowerShell-skript och -moduler till system som inte har åtkomst till Internet
  • Leverera PowerShell-skript och moduler som endast är tillgängliga för din organisation

Den här artikeln beskriver hur du konfigurerar en lokal PowerShell-lagringsplats. Artikeln beskriver även offlinePowerShellGetDeploy-modulen som är tillgänglig från PowerShell-galleriet. Den här modulen innehåller cmdletar för att installera den senaste versionen av PowerShellGet på din lokala lagringsplats.

Lokala lagringsplatstyper

Det finns två sätt att skapa en lokal PSRepository: NuGet-server eller filresurs. Varje typ har fördelar och nackdelar:

NuGet Server

Fördelar Nackdelar
Efterliknar PowerShellGallery-funktioner Flernivåappen kräver stöd för driftplanering &
NuGet integreras med Visual Studio, andra verktyg Autentiseringsmodell och NuGet-kontohantering krävs
NuGet stöder metadata i .Nupkg paket Publicering kräver api-nyckelhanteringsunderhåll &
Tillhandahåller sökning, paketadministration osv.

Filresurs

Fördelar Nackdelar
Enkelt att konfigurera, säkerhetskopiera och underhålla Metadata som används av PowerShellGet är inte tillgängliga
Enkel säkerhetsmodell – användarbehörigheter för resursen Inget användargränssnitt utöver grundläggande filresurs
Inga begränsningar, till exempel att ersätta befintliga objekt Begränsad säkerhet och ingen registrering av vem som uppdaterar vad

PowerShellGet fungerar med båda typerna och har stöd för att hitta versioner och beroendeinstallationer. Vissa funktioner som fungerar för PowerShell-galleriet är dock inte tillgängliga för nuget-basservrar eller filresurser.

  • Allt är ett paket – ingen differentiering av skript, moduler, DSC-resurser eller rollfunktioner.
  • Filresursservrar kan inte se paketmetadata, inklusive taggar.

Skapa en lokal lagringsplats

I följande artikel visas stegen för att konfigurera en egen NuGet-server.

Följ stegen fram till den punkt då paket läggs till. Stegen för att publicera ett paket beskrivs senare i den här artikeln.

För en filresursbaserad lagringsplats kontrollerar du att användarna har behörighet att komma åt filresursen.

Registrera en lokal lagringsplats

Innan en lagringsplats kan användas måste den registreras med kommandot Register-PSRepository . I exemplen nedan är InstallationPolicy inställt på Betrodd, under förutsättning att du litar på din egen lagringsplats.

# 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

Notera skillnaden mellan hur de två kommandona hanterar ScriptSourceLocation. För filresursbaserade lagringsplatser måste SourceLocation och ScriptSourceLocation matcha. För en webbaserad lagringsplats måste de vara olika, så i det här exemplet läggs ett avslutande "/" till i SourceLocation.

Om du vill att den nyligen skapade PSRepository ska vara standardlagringsplatsen måste du avregistrera alla andra PSRepositories. Exempel:

Unregister-PSRepository -Name PSGallery

Anteckning

Lagringsplatsens namn PSGallery är reserverat för användning av PowerShell-galleriet. Du kan avregistrera PSGallery, men du kan inte återanvända namnet PSGallery för någon annan lagringsplats.

Om du behöver återställa PSGallery kör du följande kommando:

Register-PSRepository -Default

Publicera till en lokal lagringsplats

När du har registrerat den lokala PSRepository kan du publicera till din lokala PSRepository. Det finns två huvudsakliga publiceringsscenarier: publicera din egen modul och publicera en modul från PSGallery.

Publicera en modul som du har skapat

Använd Publish-Module och Publish-Script för att publicera modulen till din lokala PSRepository på samma sätt som du gör för PowerShell-galleriet.

  • Ange platsen för koden
  • Ange en API-nyckel
  • Ange namnet på lagringsplatsen. Till exempel -PSRepository LocalPSRepo

Anteckning

Du måste skapa ett konto på NuGet-servern och sedan logga in för att generera och spara API-nyckeln. För en filresurs använder du valfri sträng som inte är tom för NuGetApiKey-värdet.

Exempel:

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

Viktigt

För att säkerställa säkerheten bör API-nycklar inte hårdkodas i skript. Använd ett säkert nyckelhanteringssystem. När du kör ett kommando manuellt ska API-nycklar inte skickas som oformaterad text för att undvika att det loggas. Cmdleten Read-Host kan användas för att på ett säkert sätt skicka värdet för API-nyckeln.

# 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'

Publicera en modul från PSGallery

Om du vill publicera en modul från PSGallery till din lokala PSRepository kan du använda cmdleten "Save-Package".

Exempel:

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

Om din lokala PSRepository är webbaserad krävs ytterligare ett steg som använder nuget.exe för att publicera.

Se dokumentationen för att användanuget.exe.

Installera PowerShellGet på ett frånkopplat system

Det är svårt att distribuera PowerShellGet i miljöer som kräver att system kopplas bort från Internet. PowerShellGet har en bootstrap-process som installerar den senaste versionen första gången den används. OfflinePowerShellGetDeploy-modulen i PowerShell-galleriet innehåller cmdletar som stöder den här bootstrap-processen.

Om du vill starta en offlinedistribution måste du:

  • Ladda ned och installera OfflinePowerShellGetDeploy ditt Internetanslutna system och frånkopplade system
  • Ladda ned PowerShellGet och dess beroenden i det Internetanslutna systemet med hjälp av cmdleten Save-PowerShellGetForOffline
  • Kopiera PowerShellGet och dess beroenden från det Internetanslutna systemet till det frånkopplade systemet
  • Använd på Install-PowerShellGetOffline det frånkopplade systemet för att placera PowerShellGet och dess beroenden i rätt mappar

Följande kommandon använder Save-PowerShellGetForOffline för att placera alla komponenter i en mapp 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'

Nu måste du göra innehållet F:\OfflinePowerShellGet i tillgängligt för dina frånkopplade system. Kör cmdleten Install-PowerShellGetOffline för att installera PowerShellGet på det frånkopplade systemet.

Anteckning

Det är viktigt att du inte kör PowerShellGet i PowerShell-sessionen innan du kör dessa kommandon. När PowerShellGet har lästs in i sessionen kan komponenterna inte uppdateras. Om du startar PowerShellGet av misstag avslutar du och startar om PowerShell.

Import-Module F:\OfflinePowerShellGetDeploy

Install-PowerShellGetOffline -LocalFolder 'F:\OfflinePowerShellGet'

När du har kört de här kommandona är du redo att publicera PowerShellGet på din lokala lagringsplats.

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

Viktigt

För att säkerställa säkerheten bör API-nycklar inte hårdkodas i skript. Använd ett säkert nyckelhanteringssystem. När du kör ett kommando manuellt ska API-nycklar inte skickas som oformaterad text för att undvika att det loggas. Cmdleten Read-Host kan användas för att på ett säkert sätt skicka värdet för API-nyckeln.

# 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'

Använda paketeringslösningar som värd för PowerShellGet-lagringsplatser

Du kan också använda paketeringslösningar som Azure Artifacts som värd för en privat eller offentlig PowerShellGet-lagringsplats. Mer information och instruktioner finns i dokumentationen om Azure Artifacts.