2

特定のレジストリ キーにアクセス許可を設定し、すべての子キーに同じアクセス許可を設定しようとしています。最初のキーのアクセス許可を設定することは問題ではありませんが、残りを機能させるには問題があります。

テスト目的で、HKLM\Software\1 とサブ フォルダー 2\3 を作成しました。

$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
    }

Write-Host $Folder を実行すると、適切なサブキーが取得されますが、それを Set-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 
    }
4

1 に答える 1

2

PSPath プロパティを使用する必要があります [Powershell ISE x86 を使用した Windows 7 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 

}

貼り付けたものとは別に、Get-ACL で他の前処理を行っているかどうかはわかりません。

このリンクを確認してください - http://blogs.technet.com/b/heyscriptingguy/archive/2009/09/15/hey-scripting-guy-september-15-2009.aspx

于 2012-06-07T14:33:08.273 に答える