2016-01-20 88 views
0

我目前使用它来获取特定文件夹的所有权限列表。powershell权限

`$InputFile = "C:\temp\Folders.txt" 
$OutputFile = "C:\temp\FolderPermissions.txt" 
$FolderList = Get-Content $InputFile 

ForEach ($Folder in $FolderList) 
{ 
    Get-Acl $folder | Format-list >>$OutputFile 
    } 

` 

我想让它从管理员的每个指定文件夹中删除除管理员以外的所有访问权限。

我已经看过使用SetAccessControl,但只能设法让它去除所有。

有人请指点我正确的方向。

感谢

回答

1

下面的代码将删除任何用户execpt匹配的用户“管理员” 如果你想添加更多的帐户将其添加到Where-Object过滤器,例如:

Where-Object {$_.IdentityReference -match 'Administrator' -or $_.IdentityReference -eq 'NT AUTHORITY\SYSTEM'}

$InputFile = "C:\temp\Folders.txt" 
$OutputFile = "C:\temp\FolderPermissions.txt" 
$FolderList = Get-Content $InputFile 

ForEach ($Folder in $FolderList) 
{ 
Get-Acl $folder | Format-list >>$OutputFile 

### Remove all ACL Rules exepet 'Administrator(s)' 

$ACL = Get-ACL -Path $Folder 
$Rules = $ACL.Access | Where-Object {$_.IdentityReference -notmatch 'Administrator'} 

    Foreach ($Rule in $Rules) 
    { 
    [Void]$ACL.RemoveAccessRule($Rule) 
    } 
    Set-Acl -Path $folder -AclObject $acl 

}  
+0

现在就试试这个,太棒了。真的很感谢帮助。 – david

+0

谢谢,这工作,但无论如何有它只改变指定文件夹的权限,而不是递归 – david

+0

它取决于你在文件夹列表中的文件夹... – Avshalom