Получите право собственности на подраздел реестра и удалите его через учетную запись SYSTEM. - PullRequest
1 голос
/ 07 марта 2019

Я развертываю обновление через WSUS для удаления сломанных разделов реестра из систем Windows 10 под управлением 1703 и 1709. Коду PowerShell необходимо открыть два раздела реестра, стать владельцем, установить права собственности для пользователей, а затем удалить их.Приведенный ниже код работает при непосредственном запуске с компьютеров:

#Set our root registry key and new owner (Users)
$rootKey = "LocalMachine"
[System.Security.Principal.SecurityIdentifier]$sid = 'S-1-5-32-545'

#First key
$key = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileNotification\TDL"

#Take ownership and delete if it exists
if (Test-Path "HKLM:\$key") {
    $regKey = [Microsoft.Win32.Registry]::$rootKey.OpenSubKey($key, 'ReadWriteSubTree', 'TakeOwnership')
    $acl = New-Object System.Security.AccessControl.RegistrySecurity
    $acl.SetOwner($sid)
    $regKey.SetAccessControl($acl)
    $acl.SetAccessRuleProtection($false, $false)
    $regKey.SetAccessControl($acl)

    Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileNotification\TDL" -Force -Recurse
} else{
    Add-content $txtLogLocation "Key 1 does not exist."
}

Однако я получаю следующую ошибку, когда этот код запускается как пользователь SYSTEM (я развертываю его через Центр обновления Windows, который запускается как SYSTEM):

Exception calling "OpenSubKey" with "3" argument(s): "Requested registry
access is not allowed."
At C:\Windows\TEMP\7zSAA99.tmp\1809ReadinessScript.ps1:224 char:2
+     $regKey = [Microsoft.Win32.Registry]::$rootKey.OpenSubKey($key, ' ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SecurityException

Exception calling "OpenSubKey" with "3" argument(s): "Requested registry
access is not allowed."
At C:\Windows\TEMP\7zSAA99.tmp\1809ReadinessScript.ps1:224 char:2
+     $regKey = [Microsoft.Win32.Registry]::$rootKey.OpenSubKey($key, ' ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SecurityException

Есть мысли о том, почему это может происходить?Это происходит из-за того, что пользователь SYSTEM запускает его, или это какая-то странная проблема PowerShell, которая требует другого метода для обработки открытия разделов реестра?

1 Ответ

0 голосов
/ 27 марта 2019

Мне удалось обойти эту проблему, используя PowerShell для создания запланированной задачи, которая затем запускает сценарий, который загружается локально на компьютер.Задача запускается как локальный пользователь, у которого есть возможность открыть подраздел и, таким образом, изменить разрешения.СИСТЕМА по какой-либо причине не имела доступа для чтения к этому конкретному ключу.

...