PowerShell para Obter um Valor do Registro: Um Tutorial Passo a Passo

Neste artigo, aprenda como usar o PowerShell para obter um valor do registro e consultar entradas em um registro usando diversos métodos.

Vamos lá!

Pré-requisitos

Todos os exemplos neste artigo serão demonstrados usando o PowerShell 7.1, que, na época da publicação deste artigo, é a versão mais recente. Você também pode usar o Windows PowerShell 5.1, se preferir. Além disso, é recomendável ter um entendimento básico dos PowerShell Drives.

Alguns exemplos podem não funcionar sem privilégios de administrador.

Obtendo Chaves e Valores do Registro com Get-ChildItem

Uma das maneiras mais simples de encontrar chaves e valores de registro é usando o cmdlet Get-ChildItem. Isso utiliza o PowerShell para obter um valor do registro e muito mais, enumerando itens nos PowerShell drives. Neste caso, o PowerShell drive é o drive HKLM encontrado ao executar Get-PSDrive.

Execute o seguinte comando em um console do PowerShell.

Get-ChildItem -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\'

Na captura de tela abaixo, você pode ver:

  1. O caminho completo da chave do registro WindowsUpdate
  2. A chave AU
  3. A lista de entradas do registro na chave AU com valores correspondentes
Getting registry values for Windows Update

Uma observação rápida sobre a captura de tela acima. Você pode perceber que a saída é um pouco enganadora. Normalmente, a saída do console do PowerShell representa propriedades de um objeto. Get-ChildItem se comporta de maneira diferente neste caso, pois esse objeto tecnicamente não possui propriedades. Comandos extras são executados em segundo plano para produzir a formatação de exibição que você vê.

Relacionado: Como Verificar uma Reinicialização Pendente no Registro do Windows

Obtendo valores do Registro com Get-ItemProperty

Continuando com a mesma chave de registro de antes, vamos usar o cmdlet Get-ItemProperty desta vez e tornar a saída mais legível.

O uso de Get-ItemProperty é ideal para obter uma propriedade de item obtendo chaves e seus valores dentro do registro. Execute o comando abaixo:

Get-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU'

Na captura de tela abaixo, você vê uma lista das chaves e valores:

  1. Para o contêiner do registro AU
  2. Propriedades relacionadas ao PowerShell que começam com PS
Using Get-ItemProperty in PowerShell to get registry values

Como alternativa, você também pode especificar o caminho do item do registro para obter a mesma saída apenas um pouco mais rápido usando o .NET. O comando abaixo está usando a Classe Registry do .NET no PowerShell para obter um valor do registro:

Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU

Obtendo valores do Registro com Get-ItemPropertyValue

Agora é hora de olhar para os valores-chave. Usando o cmdlet Get-ItemPropertyValue com o mesmo contêiner de registro como antes, vamos olhar para o valor da chave NoAutoUpdate. Execute o seguinte comando PowerShell:

Get-ItemPropertyValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU\' -Name NoAutoUpdate

Usando Get-ItemPropertyValue, você obterá uma saída mais sucinta mostrando apenas o valor e não qualquer outra informação que você viu anteriormente.

NoAutoUpdate key and the corresponding value

Consultando o Registro sem PS Drives

Ao longo deste tutorial, você tem usado drives do PowerShell para trabalhar com o registro. Fazê-lo desta forma não é a única maneira; você também pode aproveitar o .NET e obter informações do registro através de classes .NET também!

Por exemplo, talvez você precise usar o PowerShell para obter um valor de registro de HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU\ : AutoUpate em um computador remoto.

Você pode fazer isso com o .NET através de:

  1. Abrindo a conexão do registro no computador remoto.
$Registry = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Computername)

2. Abrindo a chave de registro específica que você está procurando.

$RegistryKey = $Registry.OpenSubKey("SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU", $true)

3. Usando o método GetValue() para consultar o valor do valor de registro dentro da chave de registro.

$RegistryKey.GetValue('AU')

Usar .NET em vez de drives do PowerShell é um pouco mais rápido e é uma maneira fácil de conectar-se e usar o PowerShell para consultar chaves e valores de registro em computadores remotos.

Testando Valores de Registro com Test-Path

Às vezes, você só precisa validar se um valor de registro está presente. A maneira de fazer isso é com o cmdlet Test-Path.

Continuando com o contêiner WindowsUpdate, teste para ver se o contêiner AU está presente executando o seguinte comando PowerShell:

Test-Path -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU'

Se o resultado for True, a chave ou contêiner existe. Mas e se você precisar testar se um valor ou entrada existe? Vamos construir uma função personalizada para este teste:

Function Test-RegistryValue ($regkey, $name) {
     if (Get-ItemProperty -Path $regkey -Name $name -ErrorAction Ignore) {
         $true
     } else {
         $false
     }
 }

Usando a função personalizada, você insere um caminho e nome da chave ou contêiner, e o valor que está procurando, e a função personalizada retornará True ou False (3), como mostrado na captura de tela abaixo:

Enter a key and value to test and return True or False

Próximos Passos

Saiba que você pode usar os comandos Get-ChildItem, Get-ItemProperty, e Get-ItemPropertyValue no PowerShell para obter um valor e chaves do registro, o que mais você pode fazer?

Se você deseja aprender mais sobre como trabalhar com o registro usando o PowerShell, confira o artigo da Microsoft Docs intitulado ‘Trabalhando com Chaves do Registro’. Você também pode encontrar uma ótima demonstração de configuração de valores de registro na postagem do blog ATA Usando Active Setup: Como Configurar um Valor de Registro em Todos os Perfis de Usuários.

Source:
https://adamtheautomator.com/powershell-to-get-a-registry-value/