Como posso descarregar vários hives do Registro no PowerShell? (Erro de acesso negado)

2

Carregamos dezenas de seções do Registro como HKLM:\temp_$username\ . Agora, quando tento executar ls HKLM:\temp_* | %{reg unload $_} , recebo ERROR: Access is denied.

Estou executando o PowerShell com privilégios elevados e tentei reiniciar o PowerShell ISE para limpar as variáveis. Ainda recebo o erro. Eu posso descarregar as seções usando a GUI, e posso executar o comando para seções individuais ( reg unload HKLM\temp_jimbob ), então estou um pouco perplexo a respeito de porque o comando simplesmente não será executado para várias seções.

O que está causando o erro de acesso negado e como posso corrigi-lo?

    
por Tanner Faulkner 20.06.2013 / 19:57

1 resposta

1

O comando ls HKLM:\temp_* está causando o erro "acesso negado". Executar este comando está deixando cada seção de registro desejada aberta e inacessível para o programa reg . É uma espécie de catch-22: sem a lista, as colmeias não podem ser descarregadas, mas a lista não pode ser usada uma vez obtida.

Para contornar isso, use a propriedade Name, que é [System.String] versus [Microsoft.Win32.RegistryKey] :

$foo = ls "hklm:\temp_*" | Select -ExpandProperty Name
foreach($bar in $foo)
{
    reg unload $bar
}

Note que deve ser duas linhas. Tentar canalizar a saída de Select resultará no mesmo erro.

Se você ainda receber erros, pode valer a pena executar a coleta de lixo usando [gc]::collect() , escolhendo Get-Variables ou reiniciando o PowerShell ISE.

    
por 20.06.2013 / 19:57