0

我们有一个多年来管理不善的共享驱动器。完全控制权被授予没有理由拥有完全权限的用户。自然,他们删除了管理员,因为“他们不需要看到我的东西”。

为了收回对我网络上所有内容的控制权,我尝试创建一个 Powershell 脚本来做两件事:

  1. 重新获得每个文件夹和文件的所有权
  2. 添加我的默认管理员组并赋予它完全控制权

第 1 步就像一个魅力,但第 2 步只能让我走到一半。我的脚本成功添加了 Admin 组,但它没有授予任何权限。

请原谅脚本是多么粗糙,它有点像弗兰肯斯坦的怪物,因为我复制粘贴了我在网上找到的几个不同的脚本来达到这一点。

function Recurse-Folder($folderPath, $identity){

 Get-ChildItem $folderPath -Recurse |

 Foreach-Object {
  Take-Ownership $_.FullName $identity 
  }
}


function Take-Ownership($object, $identity) {

 # Give ownership of object to default admin group
 takeown.exe /A /F $object


 # Create new ACL
 $acl = Get-Acl -Path $object
 
 # Set properties
 # $identity = "BUILTIN\Administrators"
 $fileSystemRights= "FullControl"
 $inheritanceFlags = "None"
 $propagationFlags = "None"
 $type = "Allow"
 
 # Create new rule
 $ruleArgs = $identity, $fileSystemRights, $inheritanceFlags, $propagationFlags, $type
 $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($ruleArgs)
 
 # Apply new rule
 $acl.SetAccessRule($rule)

 (Get-Item $object).SetAccessControl($acl)


}


$Path = '\\ShareServer1\Share\'
$identity = 'BUILTIN\Administrators'
# $identity = 'NetAdmin'

Take-OwnerShip $Path $identity
Recurse-Folder $Path $identity


Write-Host
Write-Host Done...
Read-Host
4

1 回答 1

1

$inheritanceFlags = "None"; $propagationFlags = "None"- 这意味着您仅向自身添加权限$object,其中没有文件和文件夹。这导致了这个(我用于$identity = 'Everyone'此): 对象本身的权限


我建议您通过 GUI 手动设置所需的 ACL,然后使用(Get-Acl -Path '\\x\share\TestFolder').Access | ? {-not $_.IsInherited}查找正确的Inheritance\Propagation组合。


Enable inheritance在子文件夹或文件上,您可以使用$acl.SetAccessRuleProtection($false,$true)$acl.SetAuditRuleProtection($false,$true)。阅读文档

于 2021-03-05T05:29:39.367 回答