web-dev-qa-db-ja.com

Powershellを使用してレジストリのアクセス許可を設定する

所有権を取得してからアクセス許可を設定する必要があるレジストリキーがあります。所有権を取得することはできますが、アクセス許可を設定すると、レジストリキーの最上位にのみ適用され、継承されません。アクセス許可をキー全体に継承させるには、何を変更する必要がありますか?

$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()
4
Meckron

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")
4
Meckron