Sdílet prostřednictvím


Práce s privátními úložišti PowerShellGet

Modul PowerShellGet podporuje jiná úložiště než Galerie prostředí PowerShell. Tyto rutiny umožňují následující scénáře:

  • Podpora důvěryhodné, předem ověřené sady modulů PowerShellu pro použití ve vašem prostředí
  • Testování kanálu CI/CD, který sestavuje moduly nebo skripty PowerShellu
  • Doručování powershellových skriptů a modulů do systémů, které nemají přístup k internetu
  • Doručování powershellových skriptů a modulů dostupných jenom pro vaši organizaci

Tento článek popisuje, jak nastavit místní úložiště PowerShellu. Článek se také zabývá modulem OfflinePowerShellGetDeploy dostupným na Galerie prostředí PowerShell. Tento modul obsahuje rutiny pro instalaci nejnovější verze modulu PowerShellGet do místního úložiště.

Typy místního úložiště

Existují dva způsoby, jak vytvořit místní psRepository: server NuGet nebo sdílená složka. Každý typ má výhody a nevýhody:

NuGet Server

Výhody Nevýhody
Napodobuje funkci PowerShellGallery Vícevrstvé aplikace vyžadují plánování provozu & podporu.
NuGet se integruje se sadou Visual Studio a dalšími nástroji Vyžaduje se model ověřování a správa účtů NuGet.
NuGet podporuje metadata v .Nupkg balíčcích Publikování vyžaduje správu klíčů rozhraní API & údržbu.
Poskytuje vyhledávání, správu balíčků atd.

Sdílená složka

Výhody Nevýhody
Snadné nastavení, zálohování a údržba Žádné uživatelské rozhraní kromě základní sdílené složky
Jednoduchý model zabezpečení – uživatelská oprávnění ke sdílené složce Omezené zabezpečení a žádné záznamy o tom, kdo co aktualizuje
Žádná omezení, například nahrazení existujících položek

PowerShellGet funguje s některým z typů a podporuje vyhledání verzí a instalaci závislostí. Některé funkce, které fungují pro Galerie prostředí PowerShell, ale nejsou k dispozici pro základní servery NuGet nebo sdílené složky. Skripty, moduly, prostředky DSC nebo možnosti rolí se nijak odlišují.

Vytvoření úložiště NuGet.Server

Následující článek uvádí postup nastavení vlastního serveru NuGet.

Postupujte podle kroků až do okamžiku přidání balíčků. Kroky pro publikování balíčku jsou popsané dále v tomto článku.

V případě úložiště založeného na sdílených složkách se ujistěte, že vaši uživatelé mají oprávnění pro přístup ke sdílené složce.

Registrace místního úložiště

Aby bylo možné úložiště použít, musí se zaregistrovat pomocí příkazu .Register-PSRepository V následujících příkladech je Zásada instalace nastavená na Trustedhodnotu za předpokladu, že vlastnímu úložišti důvěřujete.

# 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

Poznamenejte si rozdíl mezi tím, jak tyto dva příkazy zpracovávají ScriptSourceLocation. U úložišť založených na sdílené složce se musí shodovat SourceLocation a ScriptSourceLocation . V případě webového úložiště se musí lišit, takže v tomto příkladu se do SourceLocation přidá koncový řetězec "/".

Pokud používáte protokol pro sdílení souborů, jako je NFS nebo SMB, nezapomeňte postupovat podle doporučených pokynů k zabezpečení protokolu. Další informace o zabezpečení protokolu SMB ve Windows najdete v tématu [Vylepšení zabezpečení SMB][09].

Pokud chcete, aby nově vytvořené úložiště PSRepository bylo výchozím úložištěm, musíte zrušit registraci všech ostatních psRepositries. Příklad:

Unregister-PSRepository -Name PSGallery

Poznámka

Název úložiště PSGallery je vyhrazen pro použití Galerie prostředí PowerShell. Registraci PSGallery můžete zrušit, ale nemůžete znovu použít název PSGallery pro žádné jiné úložiště.

Pokud potřebujete obnovit PSGallery, spusťte následující příkaz:

Register-PSRepository -Default

Publikování do místního úložiště

Jakmile zaregistrujete místní psRepository, můžete publikovat do místního psRepository. Existují dva hlavní scénáře publikování: publikování vlastního modulu a publikování modulu z PSGallery.

Publikování modulu, který jste vytvořili

Pomocí Publish-Module a Publish-Script publikujte modul do místního prostředí PSRepository stejným způsobem jako u Galerie prostředí PowerShell.

  • Zadejte umístění kódu.
  • Zadání klíče rozhraní API
  • Zadejte název úložiště. Například -PSRepository LocalPSRepo.

Poznámka

Musíte vytvořit účet na serveru NuGet a pak se přihlásit, abyste vygeneroval a uložil klíč rozhraní API. Pro sdílenou složku použijte pro hodnotu NuGetApiKey libovolný neprázdný řetězec.

Příklady:

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

Důležité

Kvůli zajištění zabezpečení by klíče rozhraní API neměly být pevně zakódované ve skriptech. Použijte zabezpečený systém správy klíčů. Při ručním spouštění příkazu by se klíče rozhraní API neměly předávat jako prostý text, aby se zabránilo jejich protokolování. Rutina Read-Host se dá použít k bezpečnému předání hodnoty klíče rozhraní 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

Publikování modulu z PSGallery

Pokud chcete publikovat modul z PSGallery do místního PSRepository, můžete použít rutinu Save-Package .

  • Zadejte název balíčku.
  • Jako zprostředkovatele zadejte NuGet.
  • Zadejte umístění PSGallery jako zdroj (https://www.powershellgallery.com/api/v2).
  • Zadejte cestu k místnímu úložišti.

Příklad:

# 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

Pokud je vaše místní služba PSRepository webová, vyžaduje další krok, který používá nuget.exe k publikování. Projděte si dokumentaci k používání nuget.exe.

Instalace modulu PowerShellGet do odpojeného systému

Nasazení modulu PowerShellGet je obtížné v prostředích, která vyžadují odpojení systémů od internetu. PowerShellGet má proces bootstrap, který při prvním použití nainstaluje nejnovější verzi. Modul OfflinePowerShellGetDeploy v Galerie prostředí PowerShell poskytuje rutiny, které podporují tento proces bootstrap.

Pokud chcete spustit offline nasazení, musíte:

  • Stáhněte a nainstalujte OfflinePowerShellGetDeploy váš systém připojený k internetu a odpojené systémy.
  • Stažení modulu PowerShellGet a jeho závislostí do systému připojeného k internetu pomocí rutiny Save-PowerShellGetForOffline
  • Zkopírování modulu PowerShellGet a jeho závislostí ze systému připojeného k internetu do odpojeného systému
  • Install-PowerShellGetOffline K umístění modulu PowerShellGet a jeho závislostí do správných složek použijte v odpojený systém.

Následující příkazy slouží Save-PowerShellGetForOffline k umístění všech komponent do složky. 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'

V tomto okamžiku musíte obsah F:\OfflinePowerShellGet zpřístupnit odpojeným systémům. Spuštěním rutiny Install-PowerShellGetOffline nainstalujte modul PowerShellGet do odpojeného systému.

Poznámka

Před spuštěním těchto příkazů je důležité nespouštět PowerShellGet v relaci PowerShellu. Po načtení modulu PowerShellGet do relace není možné součásti aktualizovat. Pokud powerShellGet spustíte omylem, ukončete a znovu spusťte PowerShell.

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

Po spuštění těchto příkazů jste připraveni publikovat PowerShellGet do místního úložiště.

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

Důležité

Kvůli zajištění zabezpečení by klíče rozhraní API neměly být pevně zakódované ve skriptech. Použijte zabezpečený systém správy klíčů. Při ručním spouštění příkazu by se klíče rozhraní API neměly předávat jako prostý text, aby se zabránilo protokolování. Rutina Read-Host se dá použít k bezpečnému předání hodnoty klíče rozhraní 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

Použití řešení pro vytváření balíčků k hostování úložišť PowerShellGet

K hostování privátního nebo veřejného úložiště PowerShellGet můžete použít také balicí řešení, jako je Azure Artifacts. Další informace a pokyny najdete v dokumentaci k Azure Artifacts.