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