O Registro do Windows é um banco de dados hierárquico que armazena configurações do sistema operacional, aplicativos, usuários e hardware. Para administradores e desenvolvedores, saber manipulá-lo via PowerShell é uma habilidade valiosa, pois permite automação de configurações, auditoria e correção de problemas. Nesta aula, você aprenderá a ler e modificar o registro com segurança, utilizando os cmdlets nativos e o PSDrive dedicado, além de boas práticas para evitar danos.

O PowerShell trata o registro como uma unidade de armazenamento virtual, o que facilita a navegação e o uso de comandos familiares como Get-Item e Set-ItemProperty. No entanto, é crucial entender a estrutura do registro e os riscos envolvidos, pois alterações incorretas podem comprometer a estabilidade do sistema. Vamos explorar cada aspecto em detalhes.

Lendo chaves

Para ler o registro, você pode usar cmdlets como Get-Item, Get-ChildItem e Get-ItemProperty. O caminho do registro segue a sintaxe Registry::HKEY_LOCAL_MACHINE\... ou, mais comumente, usando o PSDrive HKLM: e HKCU: para as hives principais.

Exemplo: para listar as subchaves de uma chave específica, use Get-ChildItem. Para obter os valores de uma chave, use Get-ItemProperty.

# Listar subchaves de HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion
Get-ChildItem -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion"

# Obter os valores de uma chave específica
Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" -Name "ProgramFilesDir"

# Obter todos os valores de uma chave (como objeto)
Get-ItemProperty -Path "HKCU:\Control Panel\Desktop"

Você também pode usar o caminho completo com o prefixo Registry:: para evitar ambiguidade, especialmente em scripts que serão executados em contextos diferentes.

Modificando (cuidado)

Modificar o registro é uma operação sensível. Antes de alterar qualquer coisa, é fundamental fazer backup da chave ou do valor, e testar em ambiente controlado. Os cmdlets New-Item, Set-ItemProperty, Remove-ItemProperty e Remove-Item são usados para criar, alterar e excluir chaves e valores.

Exemplo: criar uma nova chave e definir um valor. Sempre valide se a chave já existe para evitar erros.

# Criar uma nova chave
New-Item -Path "HKCU:\Software\MinhaEmpresa" -Force

# Definir um valor
New-ItemProperty -Path "HKCU:\Software\MinhaEmpresa" -Name "Config" -Value "123" -PropertyType String

# Alterar um valor existente
Set-ItemProperty -Path "HKCU:\Software\MinhaEmpresa" -Name "Config" -Value "456"

Para remover, use Remove-ItemProperty para valores e Remove-Item para chaves. Cuidado: a remoção é permanente e não vai para a lixeira.

# Remover um valor
Remove-ItemProperty -Path "HKCU:\Software\MinhaEmpresa" -Name "Config"

# Remover uma chave (e subchaves, se houver)
Remove-Item -Path "HKCU:\Software\MinhaEmpresa" -Recurse

PSDrive do registro

O PowerShell cria automaticamente PSDrives para o registro: HKLM: (HKEY_LOCAL_MACHINE) e HKCU: (HKEY_CURRENT_USER). Eles funcionam como unidades de disco, permitindo usar Set-Location, Get-ChildItem, etc. Você também pode criar drives personalizados com New-PSDrive para facilitar o acesso a caminhos longos.

Exemplo: navegar como se fosse um sistema de arquivos.

# Navegar para HKCU\Software
Set-Location HKCU:\Software

# Listar conteúdo
Get-ChildItem

# Criar um drive personalizado para um caminho específico
New-PSDrive -Name MeuReg -PSProvider Registry -Root HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
Set-Location MeuReg:\
Get-ChildItem

O PSDrive do registro é extremamente útil para scripts que precisam percorrer várias chaves, pois permite usar os mesmos comandos de navegação que você já conhece.

Boas práticas

Ao trabalhar com o registro, siga estas recomendações para evitar problemas:

  • Backup antes de alterar: use Export-RegistryKey ou reg export para salvar a chave.
  • Teste em uma VM: nunca aplique alterações diretamente em produção sem testar.
  • Use caminhos com prefixo Registry:: em scripts para evitar ambiguidade com outros PSDrives.
  • Valide a existência da chave antes de criar ou modificar, usando Test-Path.
  • Prefira Set-ItemProperty a New-ItemProperty para valores que podem já existir, pois ele não gera erro.
  • Evite usar o registro para configurações que podem ser armazenadas em arquivos (como JSON), a menos que seja necessário para integração com o sistema.
  • Documente suas alterações e mantenha um log para auditoria.

Além disso, entenda os tipos de valor do registro (String, ExpandString, Binary, DWord, QWord, MultiString) e use-os corretamente. Por exemplo, caminhos de arquivo com variáveis de ambiente devem usar ExpandString.

# Exemplo de backup e restauração com reg export
reg export "HKCU\Software\MinhaEmpresa" C:\backup.reg

# Restaurar (com confirmação)
reg import C:\backup.reg

Referências

Exercícios

  1. Exercício 1: Escreva um comando para listar todas as subchaves de HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run e exibir apenas os nomes das chaves.
  2. ✓ Resposta:
    Get-ChildItem -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" | Select-Object -ExpandProperty Name
  3. Exercício 2: Crie uma nova chave chamada MinhaApp em HKCU:\Software e defina um valor DWORD chamado Versao com o valor 1.
  4. ✓ Resposta:
    New-Item -Path "HKCU:\Software\MinhaApp" -Force
    New-ItemProperty -Path "HKCU:\Software\MinhaApp" -Name "Versao" -Value 1 -PropertyType DWord
  5. Exercício 3: Usando o PSDrive do registro, navegue até HKCU:\Control Panel\Desktop e liste os valores da chave, mostrando apenas os nomes e valores.
  6. ✓ Resposta:
    Set-Location HKCU:\Control Panel\Desktop
    Get-ItemProperty . | Format-List
  7. Exercício 4: Faça um backup da chave HKCU:\Software\MinhaApp para o arquivo C:\backup_minhaapp.reg usando o utilitário reg.
  8. ✓ Resposta:
    reg export "HKCU\Software\MinhaApp" C:\backup_minhaapp.reg
  9. Exercício 5: Escreva um script que verifique se a chave HKCU:\Software\MinhaApp existe e, se existir, altere o valor de Versao para 2; caso contrário, crie a chave com o valor 1.
  10. ✓ Resposta:
    $path = "HKCU:\Software\MinhaApp"
    if (Test-Path $path) {
        Set-ItemProperty -Path $path -Name "Versao" -Value 2
    } else {
        New-Item -Path $path -Force
        New-ItemProperty -Path $path -Name "Versao" -Value 1 -PropertyType DWord
    }

Observações finais

O registro do Windows é poderoso, mas perigoso. Sempre que possível, prefira configurações por política de grupo ou arquivos de configuração, que são mais fáceis de gerenciar e reverter. Quando precisar usar o registro, siga as boas práticas apresentadas e mantenha backups. Com o PowerShell, você pode automatizar tarefas complexas de forma eficiente, mas a responsabilidade é sua.