2011-01-21 83 views
2

基于Windows PowerShell 2.0管理员口袋顾问中的示例我的印象是应该可以将ACL从一个注册表项复制到另一个注册表项。事情是这样的我可以将ACL从一个注册表项复制到PowerShell 2.0中的另一个注册表项

$ ACL =获得的ACL -path HKCU:\ SOFTWARE \富
设置ACL -path HKCU:\ SOFTWARE \酒吧-aclobject $ ACL

但是我觉得这是无声的无法工作。该命令似乎可以正确完成,但是当您检查hkcu:\ software \ bar上的ACL时,您会发现它的ACL未更改。

如果我正在处理文件而不是注册表项,则此模式可以正常工作。

如果我做这样的事情

$ ACL =获得的ACL -path HKCU:\ SOFTWARE \酒吧
$规则=新对象system.security.accesscontrol.registryaccessrule` “谜\ karmac” “FullControl”,“allow” $ acl.addaccessrule($ rule) $ acl | set-acl

这是行不通的。

所以基本上我问是否有可能将注册表ACL项从一个密钥复制到另一个密钥,或者您是否需要修改每个注册表项的ACL。

我在Windows 7旗舰版64位,在64位模式下运行PowerShell 2.0。我也尝试以管理员身份运行PowerShell会话。

任何帮助,将不胜感激。谢谢。

+0

我在这个问题上进行了一些尝试。我发现可以将ACL对象从一个文件复制到另一个文件。是不是可以将ACL对象从一个注册表项复制到另一个注册表项? – lowteq 2011-01-23 07:07:13

回答

4

注册表ACL似乎被优化为只有在ACL中检测到更改时才会持续存在。总之,如果你想从一个键复制到另一个访问控制列表,你必须做出改变(任何改变)在ACL列表之前,它将被应用到新的密钥:

$acl = get-acl -path hkcu:\software\foo 
$r = $acl.GetAccessRules($true, $true, [security.principal.ntaccount]) 
$acl.RemoveAccessRuleAll($r[0]) 
$acl.AddAccessRule($r[0]) 
set-acl -path hkcu:\software\bar -aclobject $acl 

此限制无关与PowerShell有关,我也用C#实现了它。这是.NET框架内的东西。

+0

你好beefarino我试过你的建议,它绝对奏效。谢谢你的信息。但我注意到另一个问题。它只能使用一次。删除并读取访问规则后,我可以执行set-acl -path hkcu:\ software \ bar -aclobject $ acl。但是,如果我随后执行set-acl -path hkcu:\ software \ baz -aclobject $ acl之类的操作,它将再次不适用新的ACL。有什么想法吗?这可能是一个错误? – lowteq 2011-01-25 04:23:01