Я столкнулся с странной проблемой, когда обновлял некоторые машины до Windows 10, из-за которых неправильные разрешения в RuntimeBroker вызывали проблемы. Я нашел онлайн-решение , которое рекомендуется изменить разрешения (сначала в реестре, а затем в конфигурации DCOM), и я пытаюсь написать сценарий Powershell для автоматизации процесса.
Я пытаюсь выполнить следующий сценарий Powershell, который должен (теоретически) делаю то, что мне нужно. Однако при последней команде (Set-Acl) я получаю SecurityException с сообщением «Запрошенный доступ к реестру не разрешен».
$path = "Registry::HKEY_CLASSES_ROOT\AppID\{9CA88EE3-ACB7-47c8-AFC4-AB702511C276}";
$account = New-Object -TypeName System.Security.Principal.NTAccount -ArgumentList 'Administrators';
$acl = Get-Acl -Path $path;
$acl.SetOwner($account);
Set-Acl -Path $path -AclObject $acl;
В настоящее время владельцем этого ключа реестра является NT SERVICE \ TrustedInstaller
, и я пытаюсь чтобы изменить его на Администраторы
. Я уже запускаю Powershell с правами администратора , но этого явно недостаточно ... я предполагаю, что здесь у меня небольшая проблема с курицей и яйцом.
Если я вручную отредактируйте разрешения этого ключа с помощью regedit
, я могу сделать это без проблем. Чем отличается этот regedit от моего скрипта? Как я могу выполнить это программно?
ОБНОВЛЕНИЕ: По предложению бриантистов, я попытался запустить эти команды как СИСТЕМУ с помощью psexec. Я сохранил приведенные выше команды Powershell в файл chowner.ps1 на своем рабочем столе, а затем выполнил следующую команду:
PsExec64.exe -accepteula -d -i -s powershell -ExecutionPolicy Bypass -File C:\Users\User\Desktop\chowner.ps1
К сожалению, я все еще получаю то же сообщение SecurityException. Я считаю, что причина в том, что даже SYSTEM не имеет прав доступа к этому конкретному ключу реестра; помните, что он принадлежит TrustedInstaller.
Вы можете использовать отличный инструмент командной строки Set-ACL от Helge Kleins: https://helgeklein.com/setacl/ .
SetACL.exe -on "hkcr\AppID\{9CA88EE3-ACB7-47c8-AFC4-AB702511C276}" -ot reg -actn setowner -ownr "n:S-1-5-32-544"
Думаю, этот трюк поможет . Необходимо запускать с повышенными разрешениями.
Вы должны запустить свой код как SYSTEM
, иначе Local System
.
Для этого вы можете использовать psexec
] из SysInternals, или вы можете запустить код как запланированную задачу, настроенную на запуск как SYSTEM
. Это должно позволить вам изменить любые разрешения.