2011-01-21 9 views
2

Windows PowerShell 2.0管理者ポケットコンサルタントの例に基づいて、あるレジストリキーから別のレジストリキーにACLをコピーする必要があるという印象があります。このPowerShell 2.0の1つのレジストリキーから別のレジストリキーにACLをコピーすることはできますか

$ ACLのような何か=取得-ACL -path HKCU:\ソフトウェア\ fooという
セット-ACL -path HKCU:\ソフトウェア\バー-aclobjectます$ ACL

は、しかし、私はこのサイレント動作しない見つけます。コマンドが正しく完了したように見えますが、hkcu:\ software \ barのACLをチェックするとACLが変更されていないことがわかります。

このパターンは、レジストリエントリの代わりにファイルを処理している場合に機能します。

私が行う場合は、この

$ ACLのようなもの=-getのACL -path HKCU:\ソフトウェア\バー
$ルール=新しいオブジェクトsystem.security.accesscontrol.registryaccessrule ` "謎\ karmac"、 "FullControl"、 "allow" $ acl.addaccessrule($ rule) $ acl | set-acl

これは機能します。

基本的には、レジストリACLエントリをあるキーから別のキーにコピーすることが可能かどうか、または個々のレジストリキーのACLを変更する必要があるかどうかを確認することです。

私は64ビットモードでpowershell 2.0を実行しているWindows 7 Ultimate 64bitを使用しています。私はまた、PowerShellセッションを管理者として実行しようとしました。

ご協力いただければ幸いです。ありがとうございました。

+0

私はこの問題についてもう少し実験しました。私は、ACLオブジェクトをあるファイルから別のファイルにコピーすることが可能であることを発見しました。 1つのレジストリキーから別のレジストリキーにACLオブジェクトをコピーすることはできませんか? – lowteq

答えて

4

レジストリACLは、変更が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

+1

同じ問題 - 最初のセットアイテムが実行されると、ACLは内部的に「保存済み」とマークされます。したがって、別の変更を加えない限り、2番目のセットアイテムに適用されません。つまり、各設定項目の前にACLオブジェクトをタッチする必要があります。非理想的な、私は知っている。 – beefarino

+0

これを正解とするといいでしょう。私は何人かの人に、正しい答えが何であるか不思議に私に連絡を取ってきた。 – beefarino

関連する問題