Назад | Перейти на главную страницу

Как я могу выгрузить несколько кустов реестра в PowerShell? (Ошибка отказа в доступе)

Я загрузил десятки кустов реестра как HKLM:\temp_$username\. Теперь, когда я пытаюсь бежать ls HKLM:\temp_* | %{reg unload $_} я получил ERROR: Access is denied.

Я запускаю PowerShell с повышенными привилегиями и пробовал перезапустить PowerShell ISE, чтобы очистить переменные. Я все еще получаю сообщение об ошибке. Я могу выгружать ульи с помощью графического интерфейса пользователя и могу запустить команду для отдельных ульев (reg unload HKLM\temp_jimbob), поэтому я немного озадачен, почему команда просто не работает для нескольких ульев.

Что вызывает ошибку отказа в доступе и как ее исправить?

Команда ls HKLM:\temp_* это то, что вызывает ошибку "доступ запрещен". Выполнение этой команды оставляет все желаемые кусты реестра открытыми и недоступными для reg программа. Это своего рода уловка-22: без списка ульи не могут быть выгружены, но список не может быть использован после получения.

Чтобы обойти это, используйте свойство Name, которое является [System.String] по сравнению с [Microsoft.Win32.RegistryKey]:

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

Обратите внимание, что это должен быть двумя строками. Попытка передать вывод Select приведет к той же ошибке.

Если вы все еще получаете ошибки, возможно, стоит запустить сборку мусора, используя [gc]::collect(), перебирая Get-Variablesили перезапустите PowerShell ISE.