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 Trusted
hodnotu 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.
PowerShell Gallery