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 profissionais de TI, a capacidade de ler e modificar o registro via script é essencial para automação, troubleshooting e configuração em massa. O PowerShell oferece cmdlets nativos e um PSDrive especial que tornam essa tarefa relativamente simples e poderosa.

Nesta aula, vamos explorar as principais formas de acessar o registro: usando cmdlets como Get-Item e Get-ItemProperty, além do PSDrive HKLM: e HKCU:. Também discutiremos como modificar valores com segurança, destacando os riscos envolvidos e as boas práticas para evitar erros que possam comprometer o sistema.

Lendo chaves

Para ler informações do registro, o PowerShell disponibiliza dois tipos de cmdlets: Get-Item e Get-ItemProperty. O primeiro retorna a chave em si (como um objeto com propriedades como Name e SubKeyCount), enquanto o segundo retorna os valores da chave (como propriedades nomeadas).

O caminho no registro é semelhante a um caminho de sistema de arquivos. Por exemplo, para acessar a chave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion, usamos HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion. No caso de HKEY_CURRENT_USER, usamos HKCU:.

Vamos ver alguns exemplos práticos:

# Obter a chave em si
Get-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'

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

# Obter os valores de uma chave
Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' | Format-List *

# Obter um valor específico
(Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion').ProgramFilesDir

Perceba que Get-ItemProperty retorna um objeto com as propriedades correspondentes aos valores do registro. Para acessar um valor específico, basta usar a notação de propriedade. Também é possível usar Get-ItemPropertyValue para obter diretamente o valor de uma propriedade, sem criar o objeto completo:

Get-ItemPropertyValue -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Name 'ProgramFilesDir'

Outra forma é usar o caminho com a sintaxe de chave e valor separados por ::, como em HKLM:\SOFTWARE\...\CurrentVersion::ProgramFilesDir, mas essa sintaxe é menos comum.

Modificando (cuidado)

Modificar o registro é uma operação delicada que pode causar instabilidade ou até inutilizar o sistema se feita incorretamente. Portanto, é indispensável ter cuidado e sempre fazer backup antes de alterar qualquer chave.

Para criar uma nova chave, usamos New-Item. Para modificar um valor existente ou criar um novo, usamos Set-ItemProperty. Para remover um valor, usamos Remove-ItemProperty, e para remover uma chave, Remove-Item.

Exemplo de criação de chave e valor:

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

# Definir um valor (cria se não existir)
Set-ItemProperty -Path 'HKCU:\Software\MinhaEmpresa' -Name 'Config' -Value '1234' -Type String

Os tipos comuns de valor são: String (REG_SZ), ExpandString (REG_EXPAND_SZ), Binary (REG_BINARY), DWord (REG_DWORD), QWord (REG_QWORD), MultiString (REG_MULTI_SZ).

Para alterar um valor existente, o mesmo comando Set-ItemProperty é usado. Se o valor não existir, ele será criado. Para remover:

Remove-ItemProperty -Path 'HKCU:\Software\MinhaEmpresa' -Name 'Config'
Remove-Item -Path 'HKCU:\Software\MinhaEmpresa' -Force

É importante notar que Remove-Item remove a chave e todas as suas subchaves, então use com muita cautela.

Para operações mais avançadas, como modificar valores binários, você pode usar Set-ItemProperty com arrays de bytes ou usar o .NET diretamente via [Microsoft.Win32.Registry].

PSDrive do registro

O PowerShell cria automaticamente dois PSDrives para o registro: HKLM: (HKEY_LOCAL_MACHINE) e HKCU: (HKEY_CURRENT_USER). Eles podem ser usados como qualquer unidade, permitindo navegar com Set-Location, listar com Get-ChildItem, etc.

Além disso, é possível criar novos PSDrives para outras hives, como HKCR (HKEY_CLASSES_ROOT) ou HKU (HKEY_USERS), usando o cmdlet New-PSDrive.

# Criar um drive para HKEY_CLASSES_ROOT
New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT

# Agora pode navegar como HKCR:\...
Get-ChildItem HKCR:\

Os PSDrives facilitam a escrita de scripts que usam caminhos consistentes. Por exemplo:

Set-Location HKCU:\Software
Get-ChildItem

Isso é especialmente útil em scripts que precisam percorrer várias chaves.

Boas práticas

Ao trabalhar com o registro, siga estas boas práticas para evitar problemas:

  • Sempre faça backup da chave ou do valor antes de modificar. Você pode exportar uma chave com reg export ou via PowerShell com Export-Item (não existe nativo, mas pode usar reg.exe export).
  • Teste em um ambiente de não produção antes de aplicar em máquinas reais.
  • Use o mínimo de privilégios: evite rodar scripts que modifiquem HKLM como administrador se não for necessário.
  • Valide os dados antes de escrever, especialmente se vierem de entrada do usuário.
  • Prefira usar o PSDrive para consistência e legibilidade.
  • Documente suas alterações para futuras referências.

Além disso, considere usar transações do registro (via .NET) se precisar de atomicidade, mas isso é avançado e raramente necessário.

Referências

Exercícios

  1. Escreva um comando para listar todas as subchaves de HKCU:\Software.

✓ Resposta:
Get-ChildItem -Path 'HKCU:\Software'
  • Como você obteria o valor da chave ProgramFilesDir em HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion usando Get-ItemProperty?
  • ✓ Resposta:
    (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion').ProgramFilesDir
  • Crie uma nova chave chamada Teste em HKCU:\Software e defina um valor DWORD chamado Versao com o número 1.
  • ✓ Resposta:
    New-Item -Path 'HKCU:\Software\Teste' -Force
    Set-ItemProperty -Path 'HKCU:\Software\Teste' -Name 'Versao' -Value 1 -Type DWord
  • Qual comando você usaria para remover a chave Teste criada no exercício anterior, incluindo todos os seus subvalores?
  • ✓ Resposta:
    Remove-Item -Path 'HKCU:\Software\Teste' -Recurse -Force
  • Explique por que é importante fazer backup antes de modificar o registro e cite um comando para exportar uma chave.
  • ✓ Resposta: É importante porque uma alteração incorreta pode causar falhas no sistema ou em aplicativos. Um comando para exportar é: reg export 'HKCU\Software\Teste' 'C:\backup.reg' ou usando PowerShell: reg.exe export 'HKCU\Software\Teste' 'C:\backup.reg'.