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