Powershell Set-Acl 失败

Powershell Set-Acl 失败

在编写一个小备份脚本时,我尝试在 Vista 上的 Powershell 1 中使用 Set-Acl 更改文件的 ACL,但始终收到以下错误消息:

Set-Acl : The security identifier is not allowed to be the owner of this object.

即使我使用最少的脚本,此错误仍然存​​在:

$acl = Get-Acl $sourcepath$file
$acl |format-list
Set-Acl -path $sourcepath$file -AclObject $acl

有人知道这个错误的原因吗?显然我没有改变文件的所有权...

顺便说一句:我最终想要实现的是将所有访问权限降低到 ReadAndExecute。在 Powershell 中是否有更简单的方法可以做到这一点?

谢谢你的帮助!Ulrich

答案1

看一下这个POWERSHELL - 编辑文件或文件夹的权限

来自帖子评论:

您显然会收到此错误,因为您正尝试更改对象的所有者。默认情况下,NTFS 仅允许您将对象的所有者设置为:

A:您自己
B:管理员组

就是这样。

但是,如果您是管理员或备份操作员,则可以将其设置为任何用户,但默认情况下此权限是禁用的,必须先启用才能执行此操作。如果您想知道 - 这是一个有意识的安全限制。

没有 .NET 或 PowerShell 特定的方法可以实现此功能,但如果我们离开 Microsoft 领域并访问 PowerShell 社区扩展项目,我们就会找到一种方法......

我没有用过 PSCX,它也不是微软的产品,所以对它们有任何疑问都可以直接咨询www.codeplex.com/PowerShellCX而不是这里,而是这里:

从以下位置下载并安装 PSCXwww.codeplex.com/PowerShellCX

使用以下语法为 TokenPriviliege 设置包装类:

$oTP = New-Object PSCX.Interop.TokenPriviliege

现在,将其授予当前进程:

Set-Privilege $oTP

您现在可以将文件夹的所有者更改为您希望的任何用户。

答案2

有趣的错误,您使用的是哪个文件/路径?它是系统路径吗?您是否以管理员身份 (UAC) 运行了 powershell?

您的示例脚本将更新文件的所有者,因为它是 $acl 的一部分。

相关内容