Trabalhando com entradas do Registro
Este exemplo só se aplica a plataformas Windows.
Como entradas do registro são propriedades de chaves e, como tal, não podem ser navegadas diretamente, precisamos usar uma abordagem ligeiramente diferente ao trabalhar com elas.
Listar as entradas do Registro
Há diversas maneiras de examinar as entradas do registro. A maneira mais simples é obter os nomes de propriedade associados a uma chave. Por exemplo, para ver os nomes das entradas na chave do registro HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
, use Get-Item
. Chaves do registro possuem uma propriedade com o nome genérico de "Property", que é uma lista de entradas do Registro na chave. O seguinte comando seleciona a propriedade Property e expande os itens para que sejam exibidos em uma lista:
Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion |
Select-Object -ExpandProperty Property
DevicePath
MediaPathUnexpanded
ProgramFilesDir
CommonFilesDir
ProductId
Para exibir as entradas do Registro em um formato mais legível, use Get-ItemProperty
:
Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
ProgramFilesDir : C:\Program Files
CommonFilesDir : C:\Program Files\Common Files
ProgramFilesDir (x86) : C:\Program Files (x86)
CommonFilesDir (x86) : C:\Program Files (x86)\Common Files
CommonW6432Dir : C:\Program Files\Common Files
DevicePath : C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesPath : C:\Program Files
ProgramW6432Dir : C:\Program Files
SM_ConfigureProgramsName : Set Program Access and Defaults
SM_GamesName : Games
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWA
RE\Microsoft\Windows\CurrentVersion
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWA
RE\Microsoft\Windows
PSChildName : CurrentVersion
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
Todas as propriedades relacionadas ao Windows PowerShell para a chave são precedidas por "PS", tal como PSPath, PSParentPath, PSChildName e PSProvider.
Você pode usar a notação *.*
para se referir ao local atual. Você pode usar Set-Location
para primeiro mudar para o contêiner do registro CurrentVersion:
Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
Como alternativa, você pode usar o PSDrive HKLM:
interno com Set-Location
:
Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion
Você pode então usar a notação .
para o local atual listar as propriedades sem especificar um caminho completo:
Get-ItemProperty -Path .
...
DevicePath : C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesDir : C:\Program Files
...
A expansão de caminho funciona da mesma maneira que no sistema de arquivos e, portanto, nesse local, é possível obter a listagem de ItemProperty para HKLM:\SOFTWARE\Microsoft\Windows\Help
usando Get-ItemProperty -Path ..\Help
.
Obter uma única entrada de Registro
Se você desejar obter uma entrada específica de uma chave do registro, poderá usar várias abordagens. Este exemplo localiza o valor de DevicePath em HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
.
Com Get-ItemProperty
, use o parâmetro Path para especificar o nome da chave e o parâmetro Name para especificar o nome da entrada DevicePath.
Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath
DevicePath : C:\WINDOWS\inf
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
Esse comando retorna as propriedades padrão do Windows PowerShell, bem como a propriedade DevicePath.
Observação
Embora Get-ItemProperty
tenha os parâmetros Filter, Include e Exclude, eles não podem ser usados para filtrar pelo nome da propriedade. Esses parâmetros se referem às chaves do Registro, que são caminhos de item, e não entradas do Registro, que são propriedades do item.
Outra opção é usar a ferramenta de linha de comando reg.exe
. Para obter ajuda com reg.exe
, digite reg.exe /?
em um prompt de comando. Para localizar a entrada DevicePath, use reg.exe
, conforme mostrado no seguinte comando:
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 COM WshShell para localizar algumas entradas do registro, embora esse método não funcione com dados binários grandes ou nomes de entrada do Registro que incluam caracteres como a barra inversa (\
). Acrescente o nome da propriedade ao caminho do item com um separador \
:
(New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath")
%SystemRoot%\inf
Configurar uma única entrada de Registro
Se você quiser obter uma entrada específica em uma chave do registro, pode usar várias abordagens. Este exemplo modifica a entrada Path em HKEY_CURRENT_USER\Environment
. A entrada Path especifica onde localizar os arquivos executáveis.
- Recupere o valor atual da entrada Path usando
Get-ItemProperty
. - Adicionar o novo valor, separando-o com um
;
. - Use
Set-ItemProperty
com a chave especificada, o nome da entrada e o valor para modificar a entrada do registro.
$value = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $value.Path += ";C:\src\bin\"
Set-ItemProperty -Path HKCU:\Environment -Name Path -Value $newpath
Observação
Embora Set-ItemProperty
tenha os parâmetros Filter, Include e Exclude, eles não podem ser usados para filtrar pelo nome da propriedade. Esses parâmetros se referem às chaves do registro, (que são caminhos de item e não entradas do registro) que são propriedades do item.
Outra opção é usar a ferramenta de linha de comando Reg.exe. Para obter ajuda com reg.exe, digite reg.exe /?
em um prompt de comando.
O exemplo a seguir altera a entrada Path ao remover o caminho adicionado no exemplo acima.
Get-ItemProperty
ainda é usado para recuperar o valor atual para evitar ter que analisar a cadeia de caracteres retornada de reg query
. Os métodos SubString e LastIndexOf são usados para recuperar o último caminho adicionado à entrada Path.
$value = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $value.Path.SubString(0, $value.Path.LastIndexOf(';'))
reg add HKCU\Environment /v Path /d $newpath /f
The operation completed successfully.
Criar novas entradas do Registro
Para adicionar uma nova entrada denominada "PowerShellPath" à chave CurrentVersion, use New-ItemProperty
com o caminho para a chave, o nome da entrada e o valor da entrada. Neste exemplo, obtemos o valor da variável $PSHome
do Windows PowerShell, que armazena o caminho para o diretório de instalação do Windows PowerShell.
Você pode adicionar a nova entrada à chave usando o seguinte comando, e ele também retorna informações sobre a nova entrada:
$newItemPropertySplat = @{
Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
Name = 'PowerShellPath'
PropertyType = 'String'
Value = $PSHome
}
New-ItemProperty @newItemPropertySplat
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
PowerShellPath : C:\Program Files\Windows PowerShell\v1.0
O PropertyType deve ter o mesmo nome de um membro da enumeração Microsoft.Win32.RegistryValueKind da tabela a seguir:
String
- Usado para valores REG_SZ. Passar um objeto[System.String]
para o parâmetro Valor.ExpandString
- Usado para valores REG_EXPAND_SZ. Passar um objeto[System.String]
para o parâmetro Valor. A cadeia de caracteres deve conter referências não expandidas a variáveis de ambiente que são expandidas quando o valor é recuperado.Binary
- Usado para valores REG_BINARY. Passar um objeto[System.Byte[]]
para o parâmetro Valor.DWord
- Usado para valores REG_DWORD. Passar um objeto[System.Int32]
para o parâmetro Valor.MultiString
- Usado para valores REG_MULTI_SZ. Passar um objeto[System.String[]]
para o parâmetro Valor.QWord
- Usado para valores REG_QWORD. Passar um objeto[System.Int64]
para o parâmetro Valor.
Você pode adicionar uma entrada de registro em vários locais, especificando uma matriz de valores para o parâmetro Path:
$newItemPropertySplat = @{
Name = 'PowerShellPath'
PropertyType = 'String'
Value = $PSHome
Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion',
'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion'
}
New-ItemProperty @newItemPropertySplat
Você também pode substituir um valor de entrada do registro pré-existente adicionando o parâmetro Force a qualquer comando New-ItemProperty
.
Os exemplos a seguir mostram como criar novas entradas de registro de vários tipos. Os valores do registro são criados em uma nova chave denominada MySoftwareKey em HKEY_CURRENT_USER\Software
. A variável $key
é usada para armazenar o objeto da nova chave.
$key = New-Item -Path HKCU:\Software -Name MySoftwareKey
$newItemPropertySplat = @{
Path = $key.PSPath
Name = 'DefaultFolders'
PropertyType = 'MultiString'
Value = 'Home', 'Temp', 'Publish'
}
New-ItemProperty @newItemPropertySplat
DefaultFolders : {Home, Temp, Publish}
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\MySoftwareKey
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software
PSChildName : MySoftwareKey
PSProvider : Microsoft.PowerShell.Core\Registry
Você pode usar a propriedade PSPath do objeto chave em comandos subsequentes.
New-ItemProperty -Path $key.PSPath -Name MaxAllowed -PropertyType QWord -Value 1024
MaxAllowed : 1024
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\MySoftwareKey
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software
PSChildName : MySoftwareKey
PSProvider : Microsoft.PowerShell.Core\Registry
Você também pode redirecionar $key
para New-ItemProperty
para adicionar um valor à chave.
$date = Get-Date -Format 'dd-MMM-yyyy'
$newItemPropertySplat = @{
Name = 'BinaryDate'
PropertyType = 'Binary'
Value = ([System.Text.Encoding]::UTF8.GetBytes($date))
}
$key | New-ItemProperty @newItemPropertySplat
BinaryDate : {51, 49, 45, 74…}
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\MySoftwareKey
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software
PSChildName : MySoftwareKey
PSProvider : Microsoft.PowerShell.Core\Registry
A exibição do conteúdo de $key
mostra as novas entradas.
$key
Hive: HKEY_CURRENT_USER\Software
Name Property
---- --------
MySoftwareKey DefaultFolders : {Home, Temp, Publish}
MaxAllowed : 1024
BinaryDate : {51, 49, 45, 74…}
O exemplo a seguir mostra o tipo de valor para cada tipo de entrada de registro:
$key.GetValueNames() | Select-Object @{n='ValueName';e={$_}},
@{n='ValueKind';e={$key.GetValueKind($_)}},
@{n='Type';e={$key.GetValue($_).GetType()}},
@{n='Value';e={$key.GetValue($_)}}
ValueName ValueKind Type Value
--------- --------- ---- -----
DefaultFolders MultiString System.String[] {Home, Temp, Publish}
MaxAllowed QWord System.Int64 1024
BinaryDate Binary System.Byte[] {51, 49, 45, 74…}
Renomear entradas do Registro
Para renomear a entrada PowerShellPath como "PSHome", use Rename-ItemProperty
:
$renameItemPropertySplat = @{
Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
Name = 'PowerShellPath'
NewName = 'PSHome'
}
Rename-ItemProperty @renameItemPropertySplat
Para exibir o valor renomeado, adicione o parâmetro PassThru ao comando.
$renameItemPropertySplat = @{
Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
Name = 'PowerShellPath'
NewName = 'PSHome'
PassThru = $true
}
Rename-ItemProperty @renameItemPropertySplat
Excluir entradas do Registro
Para excluir as duas 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