Werken met PowerShellGet-privé-opslagplaatsen

De PowerShellGet-module ondersteunt andere opslagplaatsen dan de PowerShell Gallery. Deze cmdlets maken de volgende scenario's mogelijk:

  • Ondersteuning voor een vertrouwde, vooraf gevalideerde set PowerShell-modules voor gebruik in uw omgeving
  • Een CI/CD-pijplijn testen waarmee PowerShell-modules of -scripts worden gebouwd
  • PowerShell-scripts en -modules leveren aan systemen die geen toegang hebben tot internet
  • PowerShell-scripts en -modules leveren die alleen beschikbaar zijn voor uw organisatie

In dit artikel wordt beschreven hoe u een lokale PowerShell-opslagplaats instelt. In het artikel wordt ook de module OfflinePowerShellGetDeploy beschreven die beschikbaar is via de PowerShell Gallery. Deze module bevat cmdlets voor het installeren van de nieuwste versie van PowerShellGet in uw lokale opslagplaats.

Typen lokale opslagplaatsen

Er zijn twee manieren om een lokale PSRepository te maken: NuGet-server of bestandsshare. Elk type heeft voordelen en nadelen:

NuGet-server

Voordelen Nadelen
PowerShellGallery-functionaliteit nauw nabootsen Voor app met meerdere lagen is ondersteuning voor het plannen van bewerkingen & vereist
NuGet kan worden geïntegreerd met Visual Studio, andere hulpprogramma's Verificatiemodel en NuGet-accountsbeheer vereist
NuGet ondersteunt metagegevens in .Nupkg pakketten Publiceren vereist onderhoud voor API-sleutelbeheer &
Biedt zoeken, pakketbeheer, enzovoort.

Bestandsshare

Voordelen Nadelen
Eenvoudig in te stellen, een back-up te maken en te onderhouden Metagegevens die worden gebruikt door PowerShellGet zijn niet beschikbaar
Eenvoudig beveiligingsmodel - gebruikersmachtigingen voor de share Geen gebruikersinterface buiten de basisbestandsshare
Geen beperkingen zoals het vervangen van bestaande items Beperkte beveiliging en geen opname van wie wat bijwerken

PowerShellGet werkt met beide typen en ondersteunt het zoeken naar versies en afhankelijkheidsinstallatie. Sommige functies die werken voor de PowerShell Gallery zijn echter niet beschikbaar voor NuGet-basisservers of -bestandsshares.

  • Alles is een pakket: geen differentiatie van scripts, modules, DSC-resources of functiemogelijkheden.
  • Bestandsshareservers kunnen geen pakketmetagegevens zien, inclusief tags.

Een lokale opslagplaats maken

Het volgende artikel bevat de stappen voor het instellen van uw eigen NuGet Server.

Volg de stappen tot het punt van het toevoegen van pakketten. Verderop in dit artikel worden de stappen voor het publiceren van een pakket behandeld.

Zorg ervoor dat uw gebruikers machtigingen hebben voor toegang tot de bestandsshare voor een opslagplaats op basis van bestandsshares.

Een lokale opslagplaats registreren

Voordat een opslagplaats kan worden gebruikt, moet deze worden geregistreerd met behulp van de Register-PSRepository opdracht. In de onderstaande voorbeelden is InstallationPolicy ingesteld op Trusted, op basis van de veronderstelling dat u uw eigen opslagplaats vertrouwt.

# 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

Noteer het verschil tussen de manier waarop de twee opdrachten ScriptSourceLocation verwerken. Voor opslagplaatsen op basis van bestandsshares moet de SourceLocation en ScriptSourceLocation overeenkomen. Voor een webopslagplaats moeten ze anders zijn, dus in dit voorbeeld wordt er een '/' toegevoegd aan de SourceLocation.

Als u wilt dat de zojuist gemaakte PSRepository de standaardopslagplaats is, moet u de registratie van alle andere PSRepositories ongedaan maken. Bijvoorbeeld:

Unregister-PSRepository -Name PSGallery

Notitie

De naam van de opslagplaats 'PSGallery' is gereserveerd voor gebruik door de PowerShell Gallery. U kunt de registratie van PSGallery ongedaan maken, maar u kunt de naam PSGallery niet opnieuw gebruiken voor een andere opslagplaats.

Als u de PSGallery wilt herstellen, voert u de volgende opdracht uit:

Register-PSRepository -Default

Publiceren naar een lokale opslagplaats

Nadat u de lokale PSRepository hebt geregistreerd, kunt u publiceren naar uw lokale PSRepository. Er zijn twee hoofdpublicatiescenario's: uw eigen module publiceren en een module publiceren vanuit de PSGallery.

Een module publiceren die u hebt gemaakt

Gebruik Publish-Module en Publish-Script publiceer uw module naar uw lokale PSRepository op dezelfde manier als voor de PowerShell Gallery.

  • De locatie voor uw code opgeven
  • Een API-sleutel opgeven
  • Geef de naam van de opslagplaats op. Bijvoorbeeld: -PSRepository LocalPSRepo

Notitie

U moet een account maken op de NuGet-server en u vervolgens aanmelden om de API-sleutel te genereren en op te slaan. Gebruik voor een bestandsshare een niet-lege tekenreeks voor de NuGetApiKey-waarde.

Voorbeelden:

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

Belangrijk

Om beveiliging te garanderen, moeten API-sleutels niet in scripts worden vastgelegd. Gebruik een beveiligd sleutelbeheersysteem. Wanneer u een opdracht handmatig uitvoert, mogen API-sleutels niet als tekst zonder opmaak worden doorgegeven om te voorkomen dat deze wordt geregistreerd, kan de Read-Host cmdlet worden gebruikt om de waarde van de API-sleutel veilig door te geven.

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

Een module publiceren vanuit de PSGallery

Als u een module van PSGallery wilt publiceren naar uw lokale PSRepository, kunt u de cmdlet Save-Package gebruiken.

Voorbeeld:

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

Als uw lokale PSRepository webgebaseerde is, is er een extra stap vereist die gebruikmaakt van nuget.exe om te publiceren.

Raadpleeg de documentatie voor het gebruik van nuget.exe.

PowerShellGet installeren op een niet-verbonden systeem

Het implementeren van PowerShellGet is moeilijk in omgevingen waarvoor systemen moeten worden losgekoppeld van internet. PowerShellGet heeft een bootstrap-proces waarmee de nieuwste versie wordt geïnstalleerd wanneer deze voor het eerst wordt gebruikt. De module OfflinePowerShellGetDeploy in de PowerShell Gallery biedt cmdlets die ondersteuning bieden voor dit bootstrap-proces.

Als u een offlineimplementatie wilt opstarten, moet u het volgende doen:

  • Download en installeer offlinePowerShellGetDeploy uw systeem dat is verbonden met internet en uw niet-verbonden systemen
  • PowerShellGet en de bijbehorende afhankelijkheden van het met internet verbonden systeem downloaden met behulp van de Save-PowerShellGetForOffline cmdlet
  • PowerShellGet en de afhankelijkheden kopiëren van het systeem dat is verbonden met internet naar het niet-verbonden systeem
  • Gebruik het Install-PowerShellGetOffline niet-verbonden systeem om PowerShellGet en de bijbehorende afhankelijkheden in de juiste mappen te plaatsen

De volgende opdrachten gebruiken Save-PowerShellGetForOffline om alle onderdelen in een map te plaatsen 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'

Op dit moment moet u de inhoud beschikbaar maken voor F:\OfflinePowerShellGet uw niet-verbonden systemen. Voer de Install-PowerShellGetOffline cmdlet uit om PowerShellGet te installeren op het niet-verbonden systeem.

Notitie

Het is belangrijk dat u PowerShellGet niet uitvoert in de PowerShell-sessie voordat u deze opdrachten uitvoert. Zodra PowerShellGet in de sessie is geladen, kunnen de onderdelen niet worden bijgewerkt. Als u PowerShellGet per ongeluk start, sluit u PowerShell af en start u deze opnieuw.

Import-Module F:\OfflinePowerShellGetDeploy

Install-PowerShellGetOffline -LocalFolder 'F:\OfflinePowerShellGet'

Nadat u deze opdrachten hebt uitgevoerd, kunt u PowerShellGet publiceren naar uw lokale opslagplaats.

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

Belangrijk

Om beveiliging te garanderen, moeten API-sleutels niet in scripts worden vastgelegd. Gebruik een beveiligd sleutelbeheersysteem. Wanneer u een opdracht handmatig uitvoert, mogen API-sleutels niet als tekst zonder opmaak worden doorgegeven om te voorkomen dat deze wordt geregistreerd, kan de Read-Host cmdlet worden gebruikt om de waarde van de API-sleutel veilig door te geven.

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

Verpakkingsoplossingen gebruiken om PowerShellGet-opslagplaatsen te hosten

U kunt ook verpakkingsoplossingen zoals Azure Artifacts gebruiken om een privé- of openbare PowerShellGet-opslagplaats te hosten. Zie de documentatie voor Azure Artifacts voor meer informatie en instructies.