2012-06-07 78 views
2

我正在尝试设置某个注册表项的权限,并且对所有子项都设置相同的权限。设置初始密钥的权限不是问题,但让剩下的工作正在给我一个问题。注册表:设置子权限

我为测试目的创建了以下内容:带有子文件夹2 \ 3的HKLM \ Software \ 1。

$REG = Get-Acl HKLM:\SOFTWARE\1 
$Rule = New-Object System.Security.AccessControl.RegistryAccessRule ("Everyone","FullControl","Allow") 
$REG.SetAccessRule($Rule) 
$REG |Set-Acl -Path HKLM:\SOFTWARE\1 
$Dir = Get-Childitem "HKLM:\SOFTWARE\1" -Recurse 

foreach ($Folder in $Dir) 
    { 
    Write-Host $Folder 
    Set-Acl $Folder $Reg 
    } 

当我做了写主机$文件夹中,我得到了正确的子项,但是当它推动它设置的ACL我收到以下错误:

Set-Acl : Cannot find path 'C:\Documents and Settings\USER\Desktop\HKEY_LOCAL_MACHINE\SOFTWARE\1\2\3' because it does not exist. 

工作液:

$REG = Get-Acl HKLM:\SOFTWARE\1 
$Rule = New-Object System.Security.AccessControl.RegistryAccessRule ("Everyone","FullControl","Allow") 
$REG.SetAccessRule($Rule) 
$REG |Set-Acl -Path HKLM:\SOFTWARE\1 
$Dir = Get-Childitem "HKLM:\SOFTWARE\1" -Recurse 

foreach ($Folder in $Dir) 
    { 
    $REG.SetAccessRule($Rule) 
    $Reg | Set-Acl $Folder.PSPath 
    } 

回答

2

您应该使用PSPath属性[测试在Windows 7中使用PowerShell ISE x86 64位 -

$REG = Get-Acl HKLM:\SOFTWARE\1 
$Dir = Get-Childitem "HKLM:\SOFTWARE\1" -Recurse 

foreach ($Folder in $Dir) 
{ 
    Write-Host $Folder 
    Set-Acl $Folder.PSPath $Reg 
} 

你总是可以找出支持成员像这样的对象 -

foreach ($Folder in $Dir) 
{  
    $Folder | Get-Member 

} 

我不知道,如果你是获取的ACL做任何其他预处理除了您粘贴什么。

Check this link - http://blogs.technet.com/b/heyscriptingguy/archive/2009/09/15/hey-scripting-guy-september-15-2009.aspx .

+0

它抛出现在一个新的错误: '设置的ACL:无法绑定参数 'AclObject'。无法将类型“System.String”的“.PSPath”值转换为键入“System.Security.AccessControl.ObjectSecurity”' – Steve

+0

我检查了。它在运行Powershell x86 ISE的Windows 7 - 64位系统上工作良好。你能否重新检查是否有任何错字错误? –

+0

如果我在我的系统上执行,您粘贴的代码与我的更改工作正常。我不知道您是否正在使用Get-ACL进行其他类型的处理。检查此链接 - http://blogs.technet.com/b/heyscriptingguy/archive/2009/09/15/hey-scripting-guy-september-15-2009.aspx。 –