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".
- Ange paketets namn
- Ange NuGet som provider
- Ange PSGallery-platsen som källa (https://www.powershellgallery.com/api/v2)
- Ange sökvägen till din lokala lagringsplats
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-PowerShellGetOfflinedet 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.