Powershell删选NTFS权限 5


你可能需要移除一些权限设置从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
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

回复 荔非苔 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

5 条评论 “Powershell删选NTFS权限