Registro do Windows
Nesta aula, você aprenderá a interagir com o Registro do Windows usando PowerShell, desde a leitura de chaves e valores até modificações seguras, além de explorar o PSDrive do registro e boas práticas para evitar danos ao sistema.
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 exportou via PowerShell comExport-Item(não existe nativo, mas pode usarreg.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
- Get-Item no Microsoft Learn
- Get-ItemProperty no Microsoft Learn
- Set-ItemProperty no Microsoft Learn
- New-Item no Microsoft Learn
- About Registry Provider
- Registro do Windows (documentação Win32)
Exercícios
- Escreva um comando para listar todas as subchaves de
HKCU:\Software.
Get-ChildItem -Path 'HKCU:\Software'ProgramFilesDir em HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion usando Get-ItemProperty?(Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion').ProgramFilesDirTeste em HKCU:\Software e defina um valor DWORD chamado Versao com o número 1.New-Item -Path 'HKCU:\Software\Teste' -Force
Set-ItemProperty -Path 'HKCU:\Software\Teste' -Name 'Versao' -Value 1 -Type DWordTeste criada no exercício anterior, incluindo todos os seus subvalores?Remove-Item -Path 'HKCU:\Software\Teste' -Recurse -Forcereg export 'HKCU\Software\Teste' 'C:\backup.reg' ou usando PowerShell: reg.exe export 'HKCU\Software\Teste' 'C:\backup.reg'.