
所有権を取得してアクセス許可を設定する必要のあるレジストリ キーがあります。所有権を取得することはできますが、アクセス許可を設定すると、レジストリ キーの最上位レベルにのみ適用され、下位レベルには継承されません。アクセス許可をキー全体に継承するには、何を変更する必要がありますか?
$AddACL = New-Object System.Security.AccessControl.RegistryAccessRule ("Domain Admins","FullControl","Allow")
$owner = [System.Security.Principal.NTAccount]"Administrators"
$keyCR = [Microsoft.Win32.Registry]::ClassesRoot.OpenSubKey("CLSID\{76A64158-CB41-11D1-8B02-00600806D9B6}",[Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree,[System.Security.AccessControl.RegistryRights]::takeownership)
# Get a blank ACL since you don't have access and need ownership
$aclCR = $keyCR.GetAccessControl([System.Security.AccessControl.AccessControlSections]::None)
$aclCR.SetOwner($owner)
$keyCR.SetAccessControl($aclCR)
# Get the acl and modify it
$aclCR = $keyCR.GetAccessControl()
$aclCR.SetAccessRule($AddACL)
$keyCR.SetAccessControl($aclCR)
$keyCR.Close()
答え1
AccessControl パラメータを詳しく調べた結果、答えが見つかりました。追加する ACL の定義が不十分でした。これが現在のコードで、最上位のキーにのみ権限が追加されます。
$AddACL = New-Object System.Security.AccessControl.RegistryAccessRule ("Domain Admins","FullControl","Allow")
これは、ACL をレジストリの最上位レベルで設定し、下位レベルに継承できるようにするコードです。
$AddACL = New-Object System.Security.AccessControl.RegistryAccessRule ("Domain Admins","FullControl","ObjectInherit,ContainerInherit","None","Allow")