假设我想通过将所有者设置为Builtin\Administrators
NAS 上某些文件夹的所有者来获取所有权。我可以通过两种方式做到这一点:
使用 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。