我正在尝试为某个注册表项设置权限,并为所有子项设置相同的权限。设置初始密钥的权限不是问题,但让其余的工作正在给我一个问题。
我为测试目的创建了以下内容: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 $文件夹时,我得到了正确的子密钥,但当它将其推送到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
}
答案 0 :(得分: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进行任何其他预处理,除了你粘贴的内容。