2011-01-21 37 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

相關問題