Korzystanie z lokalnych repozytoriów PowerShellGet

Moduł PowerShellGet obsługuje repozytoria inne niż Galeria programu PowerShell. Te polecenia cmdlet umożliwiają wykonywanie następujących scenariuszy:

  • Obsługa zaufanego, wstępnie zweryfikowanego zestawu modułów programu PowerShell do użycia w danym środowisku
  • Testowanie potoku ciągłej integracji/ciągłego wdrażania, który kompiluje moduły lub skrypty programu PowerShell
  • Dostarczanie skryptów i modułów programu PowerShell do systemów, które nie mogą uzyskać dostępu do Internetu
  • Dostarczanie skryptów i modułów programu PowerShell dostępnych tylko dla organizacji

W tym artykule opisano sposób konfigurowania lokalnego repozytorium programu PowerShell. W tym artykule omówiono również moduł OfflinePowerShellGetDeploy dostępny w Galeria programu PowerShell. Ten moduł zawiera polecenia cmdlet służące do instalowania najnowszej wersji modułu PowerShellGet w repozytorium lokalnym.

Typy repozytoriów lokalnych

Istnieją dwa sposoby tworzenia lokalnego repozytorium PSRepository: serwer NuGet lub udział plików. Każdy typ ma zalety i wady:

Serwer NuGet

Zalety Wady
Naśladuje funkcjonalność programu PowerShellGallery Aplikacja wielowarstwowa wymaga planowania operacji & pomocy technicznej
Rozwiązanie NuGet integruje się z programem Visual Studio, innymi narzędziami Wymagany model uwierzytelniania i zarządzanie kontami NuGet
Pakiet NuGet obsługuje metadane w .Nupkg pakietach Publikowanie wymaga & konserwacji usługi API Key Management
Udostępnia wyszukiwanie, administrowanie pakietami itp.

Udział plików

Zalety Wady
Łatwe konfigurowanie, tworzenie kopii zapasowych i konserwację Brak interfejsu użytkownika poza podstawowym udziałem plików
Prosty model zabezpieczeń — uprawnienia użytkownika w udziale Ograniczone zabezpieczenia i brak rejestrowania, kto aktualizuje to, co
Brak ograniczeń, takich jak zastępowanie istniejących elementów

Moduł PowerShellGet współdziała z jednym z typów i obsługuje lokalizowanie wersji i instalacji zależności. Jednak niektóre funkcje, które działają dla Galeria programu PowerShell nie są dostępne dla podstawowych serwerów NuGet lub udziałów plików. Nie ma różnic między skryptami, modułami, zasobami DSC ani funkcjami ról.

Tworzenie repozytorium NuGet.Server

W poniższym artykule wymieniono kroki konfigurowania własnego serwera NuGet.

Wykonaj kroki aż do momentu dodania pakietów. Kroki publikowania pakietu zostały omówione w dalszej części tego artykułu.

W przypadku repozytorium opartego na udziale plików upewnij się, że użytkownicy mają uprawnienia dostępu do udziału plików.

Rejestrowanie repozytorium lokalnego

Aby można było użyć repozytorium, należy je zarejestrować przy użyciu Register-PSRepository polecenia . W poniższych przykładach właściwość InstallationPolicy jest ustawiona na Trustedwartość , przy założeniu, że ufasz własnemu repozytorium.

# 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

Zwróć uwagę na różnicę między sposobem, w jaki oba polecenia obsługują element ScriptSourceLocation. W przypadku repozytoriów opartych na udziale plików muszą być zgodne lokalizacje SourceLocation i ScriptSourceLocation . W przypadku repozytorium internetowego muszą być różne, więc w tym przykładzie do lokalizacji SourceLocation jest dodawany końcowy ciąg "/".

W przypadku korzystania z protokołu udostępniania plików, takiego jak NFS lub SMB, postępuj zgodnie z zalecanymi wskazówkami dotyczącymi zabezpieczania protokołu. Aby uzyskać więcej informacji na temat zabezpieczania protokołu SMB w systemie Windows, zobacz [Ulepszenia zabezpieczeń protokołu SMB][09].

Jeśli nowo utworzone repozytorium PSRepository ma być domyślnym repozytorium, musisz wyrejestrować wszystkie inne repozytoria PSRepositories. Na przykład:

Unregister-PSRepository -Name PSGallery

Uwaga

Nazwa repozytorium "PSGallery" jest zarezerwowana do użytku przez Galeria programu PowerShell. Można wyrejestrować program PSGallery, ale nie można ponownie użyć nazwy PSGallery dla żadnego innego repozytorium.

Jeśli chcesz przywrócić bazę danych PSGallery, uruchom następujące polecenie:

Register-PSRepository -Default

Publikowanie w repozytorium lokalnym

Po zarejestrowaniu lokalnego repozytorium PSRepository możesz opublikować je w lokalnym repozytorium PS. Istnieją dwa główne scenariusze publikowania: publikowanie własnego modułu i publikowanie modułu z galerii PSGallery.

Publikowanie utworzonego modułu

Użyj polecenia Publish-Module i Publish-Script , aby opublikować moduł w lokalnym repozytorium PSRepository w taki sam sposób, jak w przypadku Galeria programu PowerShell.

  • Określanie lokalizacji kodu
  • Podawanie klucza interfejsu API
  • Określ nazwę repozytorium. Na przykład -PSRepository LocalPSRepo

Uwaga

Musisz utworzyć konto na serwerze NuGet, a następnie zalogować się, aby wygenerować i zapisać klucz interfejsu API. W przypadku udziału plików użyj dowolnego ciągu innego niż pusty dla wartości NuGetApiKey.

Przykłady:

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

Ważne

Aby zapewnić bezpieczeństwo, klucze interfejsu API nie powinny być zakodowane w skryptach. Użyj bezpiecznego systemu zarządzania kluczami. Podczas ręcznego wykonywania polecenia klucze interfejsu API nie powinny być przekazywane jako zwykły tekst, aby uniknąć jego rejestrowania, Read-Host można użyć polecenia cmdlet do bezpiecznego przekazania wartości klucza interfejsu 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

Publikowanie modułu z galerii PSGallery

Aby opublikować moduł z galerii PSGallery w lokalnym repozytorium PS, możesz użyć Save-Package polecenia cmdlet .

  • Określanie nazwy pakietu
  • Określ element "NuGet" jako dostawcę
  • Określ lokalizację galerii PSGallery jako źródło (https://www.powershellgallery.com/api/v2)
  • Określanie ścieżki do lokalnego repozytorium

Przykład:

# 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

Jeśli lokalne repozytorium PSRepository jest oparte na sieci Web, wymaga dodatkowego kroku używanego nuget.exe do publikowania. Zapoznaj się z dokumentacją dotyczącą używania nuget.exe.

Instalowanie modułu PowerShellGet w systemie bez połączenia

Wdrażanie modułu PowerShellGet jest trudne w środowiskach wymagających odłączenia systemów od Internetu. Moduł PowerShellGet ma proces uruchamiania, który instaluje najnowszą wersję przy pierwszym użyciu. Moduł OfflinePowerShellGetDeploy w Galeria programu PowerShell udostępnia polecenia cmdlet, które obsługują ten proces uruchamiania.

Aby uruchomić wdrożenie w trybie offline, musisz:

  • Pobierz i zainstaluj moduł OfflinePowerShellGetDeploy systemu połączonego z Internetem i odłączonych systemów
  • Pobierz moduł PowerShellGet i jego zależności w systemie połączonym z Internetem Save-PowerShellGetForOffline przy użyciu polecenia cmdlet
  • Kopiowanie modułu PowerShellGet i jego zależności z systemu połączonego z Internetem do odłączonego systemu
  • Użyj polecenia Install-PowerShellGetOffline w odłączonym systemie, aby umieścić moduł PowerShellGet i jego zależności w odpowiednich folderach

Następujące polecenia służą Save-PowerShellGetForOffline do umieszczania wszystkich składników w folderze 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'

W tym momencie należy udostępnić zawartość F:\OfflinePowerShellGet odłączonych systemów. Uruchom polecenie cmdlet , Install-PowerShellGetOffline aby zainstalować moduł PowerShellGet w rozłączonym systemie.

Uwaga

Ważne jest, aby nie uruchamiać modułu PowerShellGet w sesji programu PowerShell przed uruchomieniem tych poleceń. Po załadowaniu modułu PowerShellGet do sesji nie można zaktualizować składników. Jeśli program PowerShellGet zostanie uruchomiony przez pomyłkę, zamknij i uruchom ponownie program PowerShell.

Import-Module F:\OfflinePowerShellGetDeploy
Install-PowerShellGetOffline -LocalFolder 'F:\OfflinePowerShellGet'

Po uruchomieniu tych poleceń możesz opublikować moduł PowerShellGet w repozytorium lokalnym.

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

Ważne

Aby zapewnić bezpieczeństwo, klucze interfejsu API nie powinny być zakodowane w skryptach. Użyj bezpiecznego systemu zarządzania kluczami. Podczas ręcznego wykonywania polecenia klucze interfejsu API nie powinny być przekazywane jako zwykły tekst, aby uniknąć jego rejestrowania, Read-Host polecenie cmdlet może służyć do bezpiecznego przekazywania wartości klucza interfejsu 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

Używanie rozwiązań do tworzenia pakietów do hostowania repozytoriów PowerShellGet

Możesz również użyć rozwiązań do tworzenia pakietów, takich jak Azure Artifacts, do hostowania prywatnego lub publicznego repozytorium PowerShellGet. Aby uzyskać więcej informacji i instrukcji, zobacz dokumentację usługi Azure Artifacts.