Я загрузил десятки кустов реестра как 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.