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.
"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.
Please also mark the comments that contributed to the solution of the article
Content-ID: 669130
Url: https://administrator.de/contentid/669130
Printed on: November 13, 2024 at 11:11 o'clock
8 Comments
Latest comment
Moin,
Gruß Thomas
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: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"
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ürlichremove-item -recurse -path "HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\SecurityManager"
Gruß Thomas
Servus @Moonchild.
Da ist schon etwas mehr nötig als das o.g.
Grüße Uwe
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