moonchild
Goto Top

Registry: Alle Berechtigungseinträge für untergeordnete Objekte. Powershell

Ich möchte in der Registry auf einem bestimmten Schlüssel
"Alle Berechtigungseinträge für untergeordnete Objekte durch vererbbare Berechtigungseinträge von diesem Objekt ersetzen"

Jemand eine Idee wie / ob man das mit Powershell setzen kann ?

Hintergrund:
Wir haben Office 2019 im Einsatz, sporadisch melden sich User mit dem Problem, dass E-Mails im Postausgang hängen bleiben, in Word nichts mehr gespeichert werden kann....

Meine Recherche hat ergeben, dass das Problem behoben werden kann, wenn man dein Registryschlüssel unter
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\SecurityManager löscht.

Alle betroffenen Rechner haben diesen Schlüssel (und untergeordnete ebenfalls). löscht man diesen, ist das Problem zunächst behoben....

Leider lässt sich der Schlüssel erst löschen, wenn die Vererbung gesetzt wurde.
problem

Content-ID: 669130

Url: https://administrator.de/contentid/669130

Ausgedruckt am: 23.11.2024 um 08:11 Uhr

TK1987
TK1987 30.10.2024 aktualisiert um 12:52:48 Uhr
Goto Top
Moin,

Zitat von @Moonchild:
Ich möchte in der Registry auf einem bestimmten Schlüssel
"Alle Berechtigungseinträge für untergeordnete Objekte durch vererbbare Berechtigungseinträge von diesem Objekt ersetzen"
Sollte mit icacls kein Problem sein:
icacls "<Ordnerpfad>\*" /t /reset  

Meine Recherche hat ergeben, dass das Problem behoben werden kann, wenn man dein Registryschlüssel unter Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\SecurityManager löscht.
Kann ich mir kaum vorstellen... aber löschen kann man den natürlich
remove-item -recurse -path "HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\SecurityManager"  

Gruß Thomas
Hubert.N
Hubert.N 30.10.2024 um 12:51:34 Uhr
Goto Top
Moin

mit icacls:
$regschl = "HKLM\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\SecurityManager"  
icacls $regschl /inheritance:e
Gruß
Moonchild
Moonchild 30.10.2024 um 15:34:09 Uhr
Goto Top
Hallo Hubert,
zunächst vielen Dank - aber leider funktioniert das nicht. Es ist ein bisschen seltsam
denn wenn ich den Pfad in eine Variable schreibe und anschl. icacls [variable] /inheritance:e aufrufe, bekomme ich den Fehler: Das System kann den angegebenen Pfad nicht finden.

Also hab ich den Weg über get-childitem versucht: $item = get-childitem -Path $key (wobei $key der HKLM-Pfad ist)
$item kann ich dann aufrufen und hab dann auch den Hive: HKEY_LOCAL_MACHINE\SOFTWARE\u.s.w....

Dachte, vielleicht funktioniert dann icacls $item /inheritance:e - geht aber auch nicht...
Falls Du noch eine Idee hast... ansonsten trotzdem vielen Dank.
Moonchild
Moonchild 30.10.2024 um 15:37:11 Uhr
Goto Top
Hallo Thomas, remove-item scheitert vermutlich daran, dass der Schlüssel unterhalb von SecurityManager nicht die entsprechenden Rechte hat. Erst wenn ich die Berechtigungen von SecurityManager nach unter vererbe, funktioniert auch remote-item.....
colinardo
Lösung colinardo 30.10.2024 aktualisiert um 15:46:32 Uhr
Goto Top
Servus @Moonchild.
Da ist schon etwas mehr nötig als das o.g.
# Script needs elevation, exit if not
if(!(new-object System.Security.Principal.WindowsPrincipal([System.Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole(544)){
    write-error "Script needs to run elevated!" -Category PermissionDenied  
    return
}
# function to take ownership of keys and reset inheritance
function Take-RegKeyOwnerShip {
    param(
        [Parameter(Mandatory=$true)][string][ValidateSet('CurrentUser','LocalMachine','ClassesRoot','CurrentConfig ','Users')]$root,  
        [string]$key,
        [System.Security.Principal.SecurityIdentifier]$sid = 'S-1-5-32-545',  
        [switch]$recurse
    )

    # Adjust Privilege Tokens
    Add-Type -Member '[DllImport("ntdll.dll")] public static extern int RtlAdjustPrivilege(ulong a, bool b, bool c, ref bool d);' -Name sec -Namespace Win32  
    9,17,18 | %{[win32.sec]::RtlAdjustPrivilege($_, 1, 0, [ref]0) | out-null}

    # recurse function
    $adjustkey = {
        param($root, $key, $sid, $recurse, $level = 0)

        # set ownership
        $regKey = [Microsoft.Win32.Registry]::$root.OpenSubKey($key, 'ReadWriteSubTree', 'TakeOwnership')  
        $acl = New-Object System.Security.AccessControl.RegistrySecurity
        $acl.SetOwner($sid)
        $regKey.SetAccessControl($acl)

        # enable inheritance
        $acl.SetAccessRuleProtection($false, $false)
        $regKey.SetAccessControl($acl)

        ### change permissions for top key and propagate it for subkeys
        if ($level -eq 0) {
            $regKey = $regKey.OpenSubKey('', 'ReadWriteSubTree', 'ChangePermissions')  
            $rule = New-Object System.Security.AccessControl.RegistryAccessRule($sid, 'FullControl', 'ContainerInherit', 'None', 'Allow')  
            $acl.ResetAccessRule($rule)
            $regKey.SetAccessControl($acl)
        }

        # dive into subkeys if recursion is on
        if ($recurse) {
            foreach($subKey in $regKey.OpenSubkey('').GetSubKeyNames()) {  
                & $adjustkey $root ("$key\$subKey") $sid $recurse ($level+1)  
            }
        }
        $regkey.Close()
    }

    & $adjustkey $root $key $sid $recurse.IsPresent
}
# key
$key = 'HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\SecurityManager'  
# take ownership of key and reset inheritance of subfolders
Take-RegKeyOwnerShip -root LocalMachine -key $key.replace('HKLM:\','') -sid 'S-1-5-32-544' -recurse  
# remove key
Remove-Item -LiteralPath $key -Force -Recurse
Grüße Uwe
Moonchild
Moonchild 30.10.2024 um 16:09:52 Uhr
Goto Top
Hallo Uwe, herzlichen Dank dafür - schau ich mir gleich morgen früh an
Moonchild
Moonchild 31.10.2024 um 06:21:59 Uhr
Goto Top
Hallo Uwe, kann dir gar nicht sagen wie ich mich gefreut habe. Funktioniert - Du hast Dir sehr viel Mühe gegeben und mein Problem gelöst. Ich war zum Zeitpunkt meines Posts schon einige Stunden am Suchen und Testen. Und ich dachte, ich könnte etwas Powershell - ich kann ja garnix face-sad außer dazu zu lernen. Besten Dank nochmal.
colinardo
colinardo 31.10.2024 aktualisiert um 07:00:17 Uhr
Goto Top
Gerne, freut mich wenn es dir hilft 🙂.