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

Listando todas as subchaves de uma chave do Registro

Você pode exibir todos os itens diretamente contidos em uma chave do Registro usando Get-ChildItem. Para exibir itens ocultos ou do sistema, adicione o parâmetro opcional Force. Por exemplo, este comando exibe os itens diretamente contidos na unidade HKCU: do Windows PowerShell, que corresponde ao local HKEY_CURRENT_USER do Registro:

PS> Get-ChildItem -Path hkcu:\


   Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER

SKC  VC Name                           Property
---  -- ----                           --------
  2   0 AppEvents                      {}
  7  33 Console                        {ColorTable00, ColorTable01, ColorTab...
 25   1 Control Panel                  {Opened}
  0   5 Environment                    {APR_ICONV_PATH, INCLUDE, LIB, TEMP...}
  1   7 Identities                     {Last Username, Last User ...
  4   0 Keyboard Layout                {}
...

Essas são as chaves do nível superior de HKEY_CURRENT_USER no Editor do Registro (Regedit.exe).

Você também pode definir esse caminho do Registro especificando o nome do provedor do Registro seguido por "::". O nome completo do provedor do Registro é Microsoft.PowerShell.Core\Registry, mas ele pode ser abreviado para Registry. Qualquer um dos comandos a seguir listará o conteúdo direto de 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 somente os itens diretamente contidos, de forma muito parecida com o comando DIR do Cmd.exe ou ls de um shell do UNIX. Para exibir os itens contidos, você precisa especificar o parâmetro Recurse. Para listar todas as chaves do Registro do HKCU, utilize o comando a seguir (essa operação pode ser muito demorada):

Get-ChildItem -Path hkcu:\ -Recurse

Get-ChildItem pode executar recursos de filtragem complexos através dos parâmetros Path, Filter, Includee Exclude, mas esses parâmetros geralmente se baseiam apenas no nome. Você pode executar a filtragem complexa baseada em outras propriedades de itens usando o cmdlet Where-Object. O comando a seguir encontra todas as chaves de HKCU:\Software que não tenham mais de uma subchave e que possuam exatamente quatro valores:

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

Copiando chaves

A cópia é feita com Copy-Item. O comando a seguir copia HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion e todas as suas propriedades para HKCU:\, criando uma nova chave chamada "CurrentVersion":

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

Se você examinar essa nova chave no editor do Registro ou usando Get-ChildItem, observará que você não possui 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 transformar o comando copy anterior em recursivo, você deve usar este comando:

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

Você ainda pode usar outras ferramentas que já estão disponíveis para fazer cópias do sistema de arquivos. Quaisquer ferramentas de edição do Registro—incluindo reg.exe, regini.exe e regedit.exe — e objetos COM que ofereçam suporte à edição do Registro (tais como WScript.Shell e a classe StdRegProv do WMI) podem ser usados no Windows PowerShell.

Criando chaves

A criação de novas chaves do Registro é mais simples do que a criação de um novo item em um sistema de arquivos. Como todas as chaves do Registro são contêineres, você não precisa especificar o tipo do item, basta fornecer um caminho explícito, desta forma:

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\_DeleteMe

Excluindo chaves

A exclusão de itens é essencialmente igual em todos os provedores. Os comandos a seguir removem itens silenciosamente:

Remove-Item -Path hkcu:\Software\_DeleteMe
Remove-Item -Path 'hkcu:\key with spaces in the name'

Removendo todas as chaves de uma chave específica

Você pode remover os itens contidos usando Remove-Item, mas terá que confirmar a remoção caso o item contenha algo mais. Por exemplo, se tentarmos excluir a subchave HKCU:\CurrentVersion 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 os itens contidos sem a solicitação de confirmação, especifique o parâmetro -Recurse:

Remove-Item -Path HKCU:\CurrentVersion -Recurse

Se quisesse remover todos os itens de HCKU:\CurrentVersion, mas não a própria subchave HKCU:\CurrentVersion, você poderia usar:

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




Sumário