Trabalhar com Repositórios PowerShellGet Privados
O módulo PowerShellGet suporta repositórios que não o Galeria do PowerShell. Estes cmdlets ativam os seguintes cenários:
- Suportar um conjunto de módulos fidedignos e pré-validados do PowerShell para utilização no seu ambiente
- Testar um pipeline CI/CD que cria módulos ou scripts do PowerShell
- Entregar scripts e módulos do PowerShell a sistemas que não conseguem aceder à Internet
- Entregar scripts e módulos do PowerShell apenas disponíveis para a sua organização
Este artigo descreve como configurar um repositório do PowerShell local. O artigo também abrange o módulo OfflinePowerShellGetDeploy disponível no Galeria do PowerShell. Este módulo contém cmdlets para instalar a versão mais recente do PowerShellGet no seu repositório local.
Tipos de repositório local
Existem duas formas de criar um PSRepository local: servidor NuGet ou partilha de ficheiros. Cada tipo tem vantagens e desvantagens:
Servidor NuGet
Vantagens | Desvantagens |
---|---|
Imita a funcionalidade PowerShellGallery | A aplicação de várias camadas requer o planeamento de operações & suporte |
O NuGet integra-se com o Visual Studio, outras ferramentas | Modelo de autenticação e gestão de contas NuGet necessária |
O NuGet suporta metadados em .Nupkg pacotes |
A publicação requer a gestão da Chave de API & manutenção |
Fornece pesquisa, administração de pacotes, etc. |
Partilha de ficheiros
Vantagens | Desvantagens |
---|---|
Fácil configurar, fazer cópias de segurança e manter | Nenhuma IU além da partilha de ficheiros básica |
Modelo de segurança simples – permissões de utilizador na partilha | Segurança limitada e nenhuma gravação de quem atualiza o quê |
Sem restrições, como substituir itens existentes |
O PowerShellGet funciona com qualquer tipo e suporta a localização de versões e instalação de dependências. No entanto, algumas funcionalidades que funcionam para o Galeria do PowerShell não estão disponíveis para servidores NuGet base ou partilhas de ficheiros. Não existe nenhuma diferenciação de scripts, módulos, recursos do DSC ou capacidades de função.
Criar um repositório NuGet.Server
O artigo seguinte lista os passos para configurar o seu próprio Servidor NuGet.
Siga os passos até ao ponto de adicionar pacotes. Os passos para publicar um pacote são abordados mais adiante neste artigo.
Para um repositório baseado em partilha de ficheiros, certifique-se de que os seus utilizadores têm permissões para aceder à partilha de ficheiros.
Registar um repositório local
Antes de poder utilizar um repositório, tem de ser registado com o Register-PSRepository
comando . Nos exemplos abaixo, InstallationPolicy está definido como Trusted
, partindo do princípio de que confia no seu próprio repositório.
# 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
Tome nota da diferença entre a forma como os dois comandos processam ScriptSourceLocation. Para repositórios baseados em partilhas de ficheiros, o SourceLocation e o ScriptSourceLocation têm de corresponder. Para um repositório baseado na Web, estes têm de ser diferentes, pelo que, neste exemplo, é adicionado um "/" à origemLocation.
Ao utilizar um protocolo de partilha de ficheiros, como NFS ou SMB, certifique-se de que segue as orientações recomendadas para proteger o protocolo. Para obter mais informações sobre como proteger o SMB no Windows, consulte [Melhorias de segurança SMB][09].
Se quiser que o PSRepository recentemente criado seja o repositório predefinido, tem de anular o registo de todos os outros PSRepositórios. Por exemplo:
Unregister-PSRepository -Name PSGallery
Nota
O nome do repositório "PSGallery" está reservado para utilização pelo Galeria do PowerShell. Pode anular o registo de PSGallery, mas não pode reutilizar o nome PSGallery para qualquer outro repositório.
Se precisar de restaurar a PSGallery, execute o seguinte comando:
Register-PSRepository -Default
Publicar num repositório local
Depois de registar o PSRepository local, pode publicar no seu PSRepository local. Existem dois cenários de publicação principais: publicar o seu próprio módulo e publicar um módulo a partir da PSGallery.
Publicar um módulo que criou
Utilize Publish-Module
e Publish-Script
publique o módulo no seu PSRepository local da mesma forma que faz para o Galeria do PowerShell.
- Especifique a localização do código
- Fornecer uma chave de API
- Especifique o nome do repositório. Por exemplo,
-PSRepository LocalPSRepo
Nota
Tem de criar uma conta no servidor NuGet e, em seguida, iniciar sessão para gerar e guardar a chave de API. Para uma partilha de ficheiros, utilize qualquer cadeia não em branco para o valor NuGetApiKey.
Exemplos:
# Publish to a NuGet Server repository using my NuGetAPI key
$publishModuleSplat = @{
Path = 'c:\projects\MyModule'
Repository = 'LocalPsRepo'
NuGetApiKey = $nuGetApiKey
}
Publish-Module @publishModuleSplat
Importante
Para garantir a segurança, as chaves de API não devem ser codificadas em scripts. Utilize um sistema de gestão de chaves segura. Ao executar um comando manualmente, as chaves de API não devem ser transmitidas como texto simples para evitar que seja registado, o Read-Host
cmdlet pode ser utilizado para transmitir em segurança o valor da chave de 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
Publicar um módulo a partir da PSGallery
Para publicar um módulo da PSGallery no seu PSRepository local, pode utilizar o Save-Package
cmdlet.
- Especificar o Nome do Pacote
- Especifique "NuGet" como Fornecedor
- Especifique a localização PSGallery como a origem (
https://www.powershellgallery.com/api/v2
) - Especifique o caminho para o repositório local
Exemplo:
# 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
Se o seu PSRepository local for baseado na Web, é necessário um passo adicional que utilize nuget.exe
para publicar. Veja a documentação para utilizar nuget.exe.
Instalar o PowerShellGet num sistema desligado
A implementação do PowerShellGet é difícil em ambientes que exigem que os sistemas sejam desligados da Internet. O PowerShellGet tem um processo de bootstrap que instala a versão mais recente da primeira vez que é utilizado. O módulo OfflinePowerShellGetDeploy no Galeria do PowerShell fornece cmdlets que suportam este processo de bootstrap.
Para iniciar uma implementação offline, tem de:
- Transferir e instalar o OfflinePowerShellGetDeploy o seu sistema ligado à Internet e os seus sistemas desligados
- Transferir o PowerShellGet e as respetivas dependências no sistema ligado à Internet com o
Save-PowerShellGetForOffline
cmdlet - Copiar o PowerShellGet e as respetivas dependências do sistema ligado à Internet para o sistema desligado
- Utilize o no sistema desligado para colocar o
Install-PowerShellGetOffline
PowerShellGet e as respetivas dependências nas pastas adequadas
Os seguintes comandos são utilizados Save-PowerShellGetForOffline
para colocar todos os componentes numa pasta 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'
Neste momento, tem de disponibilizar o conteúdo dos F:\OfflinePowerShellGet
seus sistemas desligados. Execute o Install-PowerShellGetOffline
cmdlet para instalar o PowerShellGet no sistema desligado.
Nota
É importante que não execute o PowerShellGet na sessão do PowerShell antes de executar estes comandos. Assim que o PowerShellGet for carregado para a sessão, os componentes não podem ser atualizados. Se iniciar o PowerShellGet por engano, saia e reinicie o PowerShell.
Import-Module F:\OfflinePowerShellGetDeploy
Install-PowerShellGetOffline -LocalFolder 'F:\OfflinePowerShellGet'
Depois de executar estes comandos, está pronto para publicar o PowerShellGet no seu repositório local.
# Publish to a NuGet Server repository using my NuGetAPI key
$publishModuleSplat = @{
Path = 'F:\OfflinePowershellGet'
Repository = 'LocalPsRepo'
NuGetApiKey = $nuGetApiKey
}
Publish-Module @publishModuleSplat
Importante
Para garantir a segurança, as chaves de API não devem ser codificadas em scripts. Utilize um sistema de gestão de chaves segura. Ao executar um comando manualmente, as chaves de API não devem ser transmitidas como texto simples para evitar que seja registado, o Read-Host
cmdlet pode ser utilizado para transmitir em segurança o valor da chave de 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
Utilizar soluções de Empacotamento para alojar repositórios do PowerShellGet
Também pode utilizar soluções de empacotamento, como Artefactos do Azure, para alojar um repositório privado ou público do PowerShellGet. Para obter mais informações e instruções, veja a documentação dos Artefactos do Azure.
PowerShell Gallery