У меня возникла странная проблема, когда я обновил некоторые машины до 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
, и я пытаюсь изменить его на Administrators
. Я уже запускаю 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 CLI 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
, a.k.a. Local System
.
Для этого вы можете использовать psexec
из SysInternals, или вы можете запустить код как запланированную задачу, которая настроена на запуск как SYSTEM
. Это должно позволить вам изменить любые разрешения.