Partilhar via


Trabalhar com chaves do registo

Este exemplo só se aplica a plataformas Windows.

Como as chaves do Registro são itens em unidades do PowerShell, trabalhar com elas é muito semelhante a trabalhar com arquivos e pastas. Uma diferença crítica é que cada item em uma unidade PowerShell baseada no Registro é um contêiner, assim como uma pasta em uma unidade do sistema de arquivos. No entanto, as entradas do Registro e seus valores associados são propriedades dos itens, não itens distintos.

Listando todas as subchaves de uma chave do Registro

Você pode mostrar todos os itens diretamente em uma chave do Registro usando Get-ChildItemo . Adicione o parâmetro Force opcional para exibir itens ocultos ou do sistema. Por exemplo, este comando exibe os itens diretamente na unidade HKCU:do PowerShell, que corresponde à seção do HKEY_CURRENT_USER Registro:

Get-ChildItem -Path HKCU:\ | Select-Object Name
   Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER

Name
----
HKEY_CURRENT_USER\AppEvents
HKEY_CURRENT_USER\Console
HKEY_CURRENT_USER\Control Panel
HKEY_CURRENT_USER\DirectShow
HKEY_CURRENT_USER\dummy
HKEY_CURRENT_USER\Environment
HKEY_CURRENT_USER\EUDC
HKEY_CURRENT_USER\Keyboard Layout
HKEY_CURRENT_USER\MediaFoundation
HKEY_CURRENT_USER\Microsoft
HKEY_CURRENT_USER\Network
HKEY_CURRENT_USER\Printers
HKEY_CURRENT_USER\Software
HKEY_CURRENT_USER\System
HKEY_CURRENT_USER\Uninstall
HKEY_CURRENT_USER\WXP
HKEY_CURRENT_USER\Volatile Environment

Estas são as chaves de nível superior visíveis no HKEY_CURRENT_USER Editor do Registro (regedit.exe).

Você também pode especificar esse caminho do Registro especificando o nome do provedor do Registro, seguido por ::. O nome completo do provedor de registro é Microsoft.PowerShell.Core\Registry, mas isso pode ser encurtado para apenas Registry. Qualquer um dos comandos a seguir listará o conteúdo diretamente em HKCU:.

Get-ChildItem -Path Registry::HKEY_CURRENT_USER
Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER
Get-ChildItem -Path Registry::HKCU
Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKCU
Get-ChildItem HKCU:

Esses comandos listam apenas os itens contidos diretamente, muito parecido com o uso DIR em cmd.exe ou ls em um shell UNIX. Para mostrar itens contidos, você precisa especificar o parâmetro Recurse . Para listar todas as chaves do Registro no HKCU:, use o seguinte comando.

Get-ChildItem -Path HKCU:\ -Recurse

Get-ChildItem pode executar recursos complexos de filtragem por meio de seus parâmetros Path, Filter, Include e Exclude , mas esses parâmetros geralmente são baseados apenas no nome. Você pode executar filtragem complexa com base em outras propriedades de itens usando o Where-Object cmdlet. O comando a seguir localiza todas as chaves dentro HKCU:\Software que não têm mais de uma subchave e também têm exatamente quatro valores:

Get-ChildItem -Path HKCU:\Software -Recurse |
    Where-Object {($_.SubKeyCount -le 1) -and ($_.ValueCount -eq 4) }

Copiando chaves

A cópia é feita com Copy-Item. O exemplo a seguir copia a CurrentVersion subchave de HKLM:\SOFTWARE\Microsoft\Windows\ e todas as suas propriedades para HKCU:\.

Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination HKCU:

Se você examinar essa nova chave no editor do Registro ou usando Get-ChildItemo , notará que não tem cópias das subchaves contidas no novo local. Para copiar todo o conteúdo de um contêiner, você precisa especificar o parâmetro Recurse . Para tornar o comando copy anterior recursivo, use este comando:

Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination HKCU: -Recurse

Você ainda pode usar outras ferramentas que já tem disponíveis para executar cópias do sistema de arquivos. Todas as ferramentas de edição do Registro, incluindo reg.exe, regini.exe, regedit.exee objetos COM que oferecem suporte à edição do Registro, como WScript.Shell e a classe StdRegProv do WMI, podem ser usadas no PowerShell.

Criação de chaves

Criar novas chaves no registro é mais simples do que criar um novo item em um sistema de arquivos. Como todas as chaves do Registro são contêineres, não é necessário especificar o tipo de item. Basta fornecer um caminho explícito, como:

New-Item -Path HKCU:\Software_DeleteMe

Você também pode usar um caminho baseado em provedor para especificar uma chave:

New-Item -Path Registry::HKCU\Software_DeleteMe

Exclusão de chaves

A exclusão de itens é essencialmente a mesma para todos os provedores. Os seguintes comandos removem itens silenciosamente:

Remove-Item -Path HKCU:\Software_DeleteMe
Remove-Item -Path 'HKCU:\key with spaces in the name'

Remover todas as teclas sob uma chave específica

Você pode remover itens contidos usando Remove-Item, mas será solicitado que confirme a remoção se o item contiver mais alguma coisa. Por exemplo, se tentarmos excluir a HKCU:\CurrentVersion subchave que criamos, veremos o seguinte:

Remove-Item -Path HKCU:\CurrentVersion
Confirm
The item at HKCU:\CurrentVersion\AdminDebug has children and the -recurse
parameter was not specified. If you continue, all children will be removed with
the item. Are you sure you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

Para excluir itens contidos sem solicitar, especifique o parâmetro Recurse :

Remove-Item -Path HKCU:\CurrentVersion -Recurse

Se você quisesse remover todos os itens dentro HKCU:\CurrentVersion , mas não HKCU:\CurrentVersion ele mesmo, você poderia usar:

Remove-Item -Path HKCU:\CurrentVersion\* -Recurse