takeown 和 Set-Acl 在改变所有权方面有什么区别?

takeown 和 Set-Acl 在改变所有权方面有什么区别?

假设我想通过将所有者设置为Builtin\AdministratorsNAS 上某些文件夹的所有者来获取所有权。我可以通过两种方式做到这一点:

使用 CMD

takeown /F "\\Server\Share\My Folder" /A

使用 Powershell

$ACL = Get-Acl -Path "\\Server\Share\My Folder"
$Account = New-Object System.Security.Principal.NTAccount("Builtin\Administrators")
$ACL.SetOwner($Account)
Set-Acl -Path "\\Server\Share\My Folder" -AclObject $ACL

由于 MS 希望让所有人都使用 Powershell,我认为 Powershell 方式更受欢迎,但我依稀记得看到过一种情况,它Set-Acl不起作用,但takeown确实起作用了。这两种方式在功能上是否存在差异?如果有,哪种方法是推荐的?

编辑:如果这个问题更适合 StackOverflow 我可以将它移到那里。

答案1

它们实际上做了同样的事情,但是您可能还记得一个区别。takeown /F file.txt从技术上讲,只需要“取得所有权” NTFS 文件权限,并且不一定需要通过 UAC 提示提升权限才能与您当前用户一起取得文件的所有权。

Set-Acl通过、icacls或文件安全 GUI更改所有者需要SeRestorePrivilege(提升),因为他们可以选择其他用户作为所有者。将所有者权限授予其他用户/组,例如Builtin\Administrators 需要海拔,所以takeown /A在几乎所有情况下都会表现得与其他命令相同。

takeown也会像许多 cmd 工具一样因路径名过长而阻塞,但 powershell 可以使用扩展长度的路径,例如Get-Acl -LiteralPath \\?\C:\folder\file.txt

答案2

Set-Acl 是一个 powershell 命令,而 takeown 是一个命令提示符命令。

命令提示符命令也可以在 powershell 中使用,但是它们的输出结构不适合在 powershell 中使用。

假设您正在使用 powershell,set-acl 将是首选方法。

Set-Acl 应该始终有效,但可能需要您先以管理员身份运行 powershell。但这同样适用于 takeown。

相关内容