Могу ли я скопировать ACL из одного раздела реестра в другой в PowerShell 2.0 - PullRequest
2 голосов
/ 21 января 2011

Основываясь на примере в Windows PowerShell 2.0, администратор Pocket Consultant, у меня сложилось впечатление, что должна быть возможность скопировать ACL из одного раздела реестра в другой.Что-то вроде этого

$ acl = get-acl -path hkcu: \ software \ foo
set-acl -path hkcu: \ software \ bar -aclobject $ acl

Однако я нахожуэто молчание не работает.Команда, кажется, завершается правильно, однако, когда вы проверяете ACL на hkcu: \ software \ bar, вы обнаруживаете, что ACL не изменился.

Этот шаблон работает, если я имею дело с файлами вместо записей реестра.

Если я сделаю что-то вроде этого

$ acl = get-acl -path hkcu: \ software \ bar
$ rule = новый объект system.security.accesscontrol.registryaccessrule `"enigma \ karmac", "FullControl", "allow" $ acl.addaccessrule ($ rule) $ acl |set-acl

Это работает.

Поэтому в основном я спрашиваю, возможно ли копировать записи ACL реестра из одного ключа в другой, или вам нужно изменить ACL каждогоиндивидуальный ключ реестра.

Я на Windows 7 Ultimate, 64-разрядная, работает PowerShell 2.0 в 64-разрядном режиме.Я также попытался запустить сеанс PowerShell в качестве администратора.

Любая помощь будет оценена.Спасибо.

1 Ответ

4 голосов
/ 24 января 2011

Реестр 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 Framework.

...