你可能需要移除一些权限设置从NTFS列表,假设你想要删除某个指定用户而因为这个用户离开了这个部门。
注意,你可以从NTFS列表管理每个组和设置每个用户,通常这不是个好注意。不过,对于每个用户的权限修改接下来的实例脚本不仅能删除这些权限,同时轻微的调整也能作为权限检查的手段。
这里有个简单的实例脚本。设定$Path与$Filter,这个脚本将可以检查这个路径文件夹的和它子目录的访问控制项目,它的配套的$filter参数是用来指定非继承ACEs对象。
输出为红色的ACEs对象代表被删除,输出为绿色的ACEs对象是被过滤的,如果脚本没有返回任何东西,代表你扫描的目录没有匹配的ACEs对象。
$Path = 'D:\TESTTEST' $Filter = 'user$' $acl1 = Get-Acl -Path $Path $found = $false foreach($acc in $acl1.access ) { if ($acc.IsInherited -eq $false) { $value = $acc.IdentityReference.Value if($value -match $Filter) { Write-Host "Remove $Value from $Path " -ForegroundColor Red $null = $ACL1.RemoveAccessRule($acc) $found = $true } else { Write-Host "Skipped $Value from $Path " -ForegroundColor Green } } } if ($found) { #去掉下面这一行注释,才会真正删除匹配到的权限 #Set-Acl -Path $Path -AclObject $acl1 -ErrorAction Stop } Get-ChildItem -Path $Path -Recurse -ErrorAction SilentlyContinue | ForEach-Object { $acl = Get-Acl -Path $_.fullname $found = $false foreach($acc in $acl.access ) { if ($acc.IsInherited -eq $false) { $value = $acc.IdentityReference.Value if($value -match $Filter) { Write-Host "Remove $Value from $Path " -ForegroundColor Red $null = $ACL.RemoveAccessRule($acc) $found = $true } else { Write-Host "Skipped $Value from $Path " -ForegroundColor Green } } } if ($found) { #去掉下面这一行注释,才会真正删除匹配到的权限 #Set-Acl -Path $_.fullname -AclObject $acl -ErrorAction Stop } }
心得:
经过Mooser的提醒,代码终于可以完全实现。此代码也是一个非常好的操作权限的例子。在实际当中小弟发现原代码只删除了子目录下的指定用户,所以故加了一段,将根目录中的用户也一并删除了。
原文地址:Removing Selected NTFS Permissions
本文链接: https://www.pstips.net/removing-selected-ntfs-permissions.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
官方的例子有点问题,自己私下修改了下但还是有问题,提示删除成功,但检查权限依旧存在。各位有时间可以测试下。
官方的例子就是没有把Get-ChildItem -Path 后面的替换成变量。改了以后要想测试成功,还需注释第29行代码。
分享一个小技巧:切换到文本编辑模式,把默认的pre标签开头修改成这样,可以让某一行高亮显示。
分享一个小技巧:切换到文本编辑模式,在默认的pre标签开头添加highlight:29,这样,可以让这一行高亮显示。
果然是高手。