A PowerShell Gallery é o repositório público central de módulos, scripts e recursos DSC da comunidade PowerShell. Ela é mantida pela Microsoft e serve como o principal ponto de distribuição de código PowerShell, permitindo que desenvolvedores compartilhem suas soluções e que administradores de sistemas instalem funcionalidades prontas em seus ambientes. Nesta aula, você aprenderá a navegar por esse vasto ecossistema, utilizando cmdlets nativos do PowerShell para descobrir, instalar e manter módulos de forma eficiente e segura.

Dominar a PowerShell Gallery é essencial para qualquer profissional que trabalhe com automação no Windows, Linux ou macOS, pois ela oferece desde utilitários simples até ferramentas complexas de gerenciamento de infraestrutura. Vamos explorar desde os comandos básicos de busca e instalação até as melhores práticas de segurança e atualização, garantindo que você use esse recurso com confiança e responsabilidade.

Find-Module e Install-Module

Os cmdlets Find-Module e Install-Module são a porta de entrada para a PowerShell Gallery. Find-Module pesquisa módulos no repositório (por padrão, a PowerShell Gallery) e retorna metadados sobre eles, como nome, versão, autor e descrição. Ele não instala nada; apenas exibe informações. Já Install-Module baixa e instala o módulo no sistema, tornando-o disponível para uso imediato.

Para começar, abra o PowerShell (ou terminal com pwsh) e execute Find-Module com um termo de pesquisa. Por exemplo, para procurar módulos relacionados a Azure, você faria:

Find-Module -Name *Azure*

Isso retornará uma lista de módulos que contêm "Azure" no nome. Você pode refinar a busca com parâmetros como -Tag, -Author ou -Version. Para obter detalhes específicos de um módulo, use Find-Module -Name Az -AllVersions para ver todas as versões disponíveis.

Quando encontrar um módulo interessante, instale-o com:

Install-Module -Name Az

Por padrão, o PowerShell instala a versão mais recente e estável. Você pode especificar uma versão com -RequiredVersion ou -MinimumVersion. Após a instalação, o módulo fica disponível imediatamente em sua sessão atual; para usá-lo em novas sessões, basta importá-lo automaticamente (o PowerShell faz isso por padrão quando você usa um comando do módulo).

Vale notar que o Install-Module pode solicitar confirmação e, em alguns casos, exigir privilégios de administrador, dependendo do escopo de instalação. Você pode usar o parâmetro -Scope CurrentUser para instalar apenas para o usuário atual, sem precisar de elevação.

Confiança e segurança

Ao instalar módulos de terceiros, você está executando código em sua máquina. Por isso, a PowerShell Gallery implementa mecanismos de confiança e segurança. Os módulos podem ser assinados digitalmente; módulos assinados por editores confiáveis são considerados mais seguros. O PowerShell verifica a assinatura e, se o editor for desconhecido, exibe um aviso antes da instalação.

Para verificar se um módulo é assinado, você pode usar Get-AuthenticodeSignature no arquivo do módulo após a instalação. Antes de instalar, você pode inspecionar os metadados e até mesmo baixar o módulo sem instalar, usando Save-Module, para analisar o código manualmente. Veja um exemplo:

Save-Module -Name ImportExcel -Path C:\Temp\Modules

Isso baixa o módulo para o diretório especificado, sem instalá-lo. Você pode então explorar os arquivos e verificar a integridade antes de decidir.

Além disso, a PowerShell Gallery permite que você configure repositórios confiáveis. Por padrão, o repositório PSGallery é registrado como confiável, mas você pode alterar isso com Set-PSRepository. Por exemplo, para exigir confirmação em todas as instalações, você pode desmarcar a confiabilidade:

Set-PSRepository -Name PSGallery -InstallationPolicy Untrusted

Isso fará com que o PowerShell peça confirmação sempre que você tentar instalar algo, dando a você a chance de revisar o módulo antes da instalação.

Outra prática recomendada é usar o parâmetro -SkipPublisherCheck com cautela. Ele ignora a verificação do editor, o que pode ser útil em cenários de automação, mas aumenta o risco. Sempre prefira módulos de editores conhecidos, como Microsoft, ou aqueles com muitos downloads e boa reputação na comunidade.

Atualizações

Manter os módulos atualizados é crucial para corrigir bugs, fechar vulnerabilidades e obter novos recursos. O PowerShell oferece o cmdlet Update-Module, que atualiza um módulo instalado para a versão mais recente disponível no repositório. Por exemplo:

Update-Module -Name Az

Isso atualiza o módulo Az para a versão mais recente. Você também pode atualizar todos os módulos de uma só vez com Update-Module sem parâmetros, mas isso pode ser arriscado se você tiver módulos personalizados ou dependências específicas. Para verificar quais módulos têm atualizações, use Find-Module com a versão instalada e compare.

Outra abordagem é usar Get-InstalledModule para listar todos os módulos instalados e suas versões. Depois, você pode verificar se há versões mais recentes no repositório com Find-Module. Um script simples para isso seria:

$installed = Get-InstalledModule
foreach ($mod in $installed) {
    $latest = Find-Module -Name $mod.Name -ErrorAction SilentlyContinue
    if ($latest -and $latest.Version -gt $mod.Version) {
        Write-Host "$($mod.Name): $($mod.Version) -> $($latest.Version)"
    }
}

Esse script lista módulos desatualizados. Você pode então atualizar seletivamente. Lembre-se de que atualizar um módulo pode quebrar scripts que dependem de uma versão específica. Portanto, em ambientes de produção, é aconselhável testar em um ambiente de desenvolvimento antes de atualizar.

Além disso, o PowerShell 7+ inclui o cmdlet Update-PSResource (do módulo PowerShellGet 3.x), que é a evolução do Update-Module. Verifique a versão do seu PowerShell para saber qual usar.

Casos de uso

A PowerShell Gallery é utilizada em diversos cenários reais. Um dos mais comuns é a instalação de módulos de gerenciamento de serviços em nuvem, como o Az para Azure ou AWS.Tools para AWS. Administradores de sistemas usam módulos como ActiveDirectory (embora este venha nativo) ou Pester para testes automatizados.

Outro caso é a automação de tarefas repetitivas. Módulos como ImportExcel permitem manipular arquivos do Excel sem precisar do Excel instalado, facilitando a geração de relatórios. PSWriteHTML ajuda a criar relatórios HTML elegantes. dbatools é um módulo popular para gerenciamento de SQL Server, com centenas de funções.

Para desenvolvedores, a Gallery é um meio de distribuir seus próprios módulos. Você pode publicar um módulo com Publish-Module, mas isso requer uma conta na PowerShell Gallery e uma chave de API. Isso é útil para compartilhar scripts internos ou ferramentas personalizadas com a comunidade.

Em ambientes corporativos, é comum configurar um repositório interno (por exemplo, usando Azure Artifacts ou NuGet) e registrar como um repositório adicional no PowerShell. Isso permite controlar quais módulos estão disponíveis e manter um processo de aprovação antes que os módulos sejam instalados.

Por fim, a Gallery também é usada em pipelines de CI/CD. Você pode instalar módulos em agentes de build para automatizar testes e deploys, garantindo que o ambiente tenha as dependências necessárias.

Boas práticas e observações finais

Ao trabalhar com a PowerShell Gallery, siga estas boas práticas: sempre verifique a reputação do módulo (número de downloads, autor, manutenção), leia a documentação e o código-fonte se possível, e teste em um ambiente não produtivo antes de implantar. Use o parâmetro -Scope CurrentUser em máquinas compartilhadas para evitar conflitos de permissão. Mantenha um inventário dos módulos instalados e suas versões, e automatize a atualização com scripts que verifiquem novas versões. Além disso, considere usar o módulo PSResource (PowerShellGet 3.x) para gerenciamento mais moderno, especialmente em PowerShell 7.

Lembre-se de que a segurança é uma responsabilidade compartilhada: a Microsoft hospeda a Gallery, mas o conteúdo é criado pela comunidade. Sempre avalie o risco antes de instalar algo. Com essas práticas, você aproveitará ao máximo o ecossistema PowerShell.

Referências

Exercícios

  1. Pesquisa e instalação: Use o PowerShell para encontrar um módulo chamado ImportExcel e instale-o. Depois, verifique se ele foi instalado corretamente usando Get-InstalledModule. Escreva o comando usado para instalar e o resultado esperado.

  2. Listagem de versões: Liste todas as versões disponíveis do módulo Az no repositório. Qual comando você usaria e qual informação é retornada?

  3. Atualização seletiva: Suponha que você tenha o módulo Az versão 9.0.0 instalado e a versão mais recente é 10.0.0. Escreva um comando para atualizar apenas o módulo Az para a versão 10.0.0.

  4. Segurança: Explique como você pode verificar se um módulo baixado é assinado digitalmente antes de instalá-lo. Dê um exemplo de comando.

  5. Automação: Escreva um script PowerShell que verifique se há atualizações para todos os módulos instalados e exiba uma lista daqueles que têm versão mais recente no repositório. Use um loop para percorrer Get-InstalledModule.