Como as entradas do Registro são propriedades de chaves e, como tal, não podem ser diretamente navegadas, precisamos adotar uma abordagem um pouco diferente ao trabalharmos com elas.

Listando entradas do Registro

Há várias formas diferentes de examinar entradas do Registro. A mais simples é obter os nomes de propriedade associados a uma chave. Por exemplo, para consultar os nomes das entradas na chave do Registro HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion, use Get-Item. As chaves do Registro têm uma propriedade com o nome genérico de "Property", que é uma lista de entradas do Registro na chave. O comando a seguir seleciona a propriedade Property e expande os itens para que eles sejam exibidos em uma lista:

PS> Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion | Select-Object -ExpandProperty Property
DevicePath
MediaPathUnexpanded
ProgramFilesDir
CommonFilesDir
ProductId

Para ver as entradas do Registro de uma forma mais legível, use Get-ItemProperty:

PS> Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion


PSPath              : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO
                      FTWARE\Microsoft\Windows\CurrentVersion
PSParentPath        : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO
                      FTWARE\Microsoft\Windows
PSChildName         : CurrentVersion
PSDrive             : HKLM
PSProvider          : Microsoft.PowerShell.Core\Registry
DevicePath          : C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesDir     : C:\Program Files
CommonFilesDir      : C:\Program Files\Common Files
ProductId           : 76487-338-1167776-22465
WallPaperDir        : C:\WINDOWS\Web\Wallpaper
MediaPath           : C:\WINDOWS\Media
ProgramFilesPath    : C:\Program Files
PF_AccessoriesName  : Accessories
(default)           :

As propriedades relacionadas ao Windows PowerShell da chave têm o prefixo "PS", como em PSPath, PSParentPath, PSChildName e PSProvider.

Você pode usar a notação "." para se referir ao local atual. Você pode usar Set-Location para passar para o primeiro contêiner do Registro CurrentVersion:

Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

Como alternativa, você pode usar o PSDrive interno HKLM com Set-Location:

Set-Location -Path hklm:\SOFTWARE\Microsoft\Windows\CurrentVersion

Em seguida, você pode usar a notação "." do local atual para listar as propriedades sem especificar um caminho completo:

PS> Get-ItemProperty -Path .
...
DevicePath          : C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesDir     : C:\Program Files
...

A expansão do caminho funciona como no sistema de arquivos; portanto, a partir desse local, você pode obter a listagem de ItemProperty para HKLM:\SOFTWARE\Microsoft\Windows\Help usando Get-ItemProperty -Path ..\Help.

Obtendo uma única entrada do Registro

Se você quiser recuperar uma entrada específica de uma chave do Registro, poderá usar uma das várias abordagens possíveis. Este exemplo localiza o valor de DevicePath em HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion.

Com Get-ItemProperty, utilize o parâmetro Path para especificar o nome da chave e o parâmetro Name para especificar o nome da entrada DevicePath.

PS> Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath


PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\
               Microsoft\Windows\CurrentVersion
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\
               Microsoft\Windows
PSChildName  : CurrentVersion
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry
DevicePath   : C:\WINDOWS\inf

Esse comando retorna as propriedades padrão do Windows PowerShell, assim como a propriedade DevicePath.

Observação:

Embora Get-ItemProperty tenha os parâmetros Filter, Includee Exclude, eles não podem ser usados para realizar a filtragem por nome de propriedade. Esses parâmetros se referem às chaves do Registro, que são caminhos de item, e não às entradas do Registro, que são propriedades de item.

Outra opção é utilizar a ferramenta de linha de comando Reg.exe. Para obter ajuda sobre reg.exe, digite reg.exe /? no prompt de comando. Para encontrar a entrada DevicePath, utilize reg.exe como mostrado no comando a seguir:

PS> reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion /v DevicePath

! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
    DevicePath  REG_EXPAND_SZ   %SystemRoot%\inf

Você também pode usar o objeto WshShell COM para encontrar algumas entradas do Registro, embora esse método não funcione com dados binários muito grandes ou com nomes de entrada do Registro que incluam caracteres como "\". Acrescente o nome da propriedade ao caminho do item com um separador \:

PS> (New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath")
%SystemRoot%\inf

Criando novas entradas do Registro

Para adicionar uma nova entrada chamada "PowerShellPath" à chave CurrentVersion, utilize New-ItemProperty com o caminho para a chave, o nome da entrada e o seu valor. Neste exemplo, usaremos o valor da variável $PSHome do Windows PowerShell, que armazena o caminho até o diretório de instalação do Windows PowerShell.

Você pode adicionar a nova entrada à chave usando o comando a seguir, que também retorna informações sobre a nova entrada:

PS> New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome


PSPath         : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR
                 E\Microsoft\Windows\CurrentVersion
PSParentPath   : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR
                 E\Microsoft\Windows
PSChildName    : CurrentVersion
PSDrive        : HKLM
PSProvider     : Microsoft.PowerShell.Core\Registry
PowerShellPath : C:\Program Files\Windows PowerShell\v1.0

PropertyType deve ser o nome de um membro de enumeração de Microsoft.Win32.RegistryValueKind na tabela a seguir:

Valor de PropertyType Significado

Binary

Dados binários

DWord

Um número UInt32 válido

ExpandString

Uma cadeia de caracteres que pode conter variáveis de ambiente e que são expandidas dinamicamente

MultiString

Uma cadeia de caracteres com várias linhas

String

Qualquer valor de cadeia de caracteres

QWord

8 bytes de dados binários

Observação:

Você pode adicionar uma entrada do Registro a vários locais especificando uma matriz de valores para o parâmetro Path:

New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion, HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome

Também é possível substituir um valor de entrada do Registro pré-existente adicionando o parâmetro Force a qualquer comando New-ItemProperty.

Renomeando entradas do Registro

Para renomear a entrada PowerShellPath a "PSHome", use Rename-ItemProperty:

Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome

Para exibir o valor renomeado, adicione o parâmetro PassThru ao comando.

Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome -passthru

Excluindo entradas do Registro

Para excluir as entradas do Registro PSHome e PowerShellPath, use Remove-ItemProperty.

Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PSHome
Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath




Sumário