在处理一个小小的备份脚本时,我尝试使用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
有谁知道这个错误的原因? 显然,我不会更改文件的所有权…
BTW:我最终想要实现的是减less对ReadAndExecute的所有访问权限。 在Powershell中可能有更简单的方法吗?
谢谢你的帮助! 乌尔里希
检查一下文件或文件夹中的POWERSHELL – EDITTING权限
来自post的评论:
你显然得到这个错误,因为你试图改变对象的所有者。 默认情况下NTFS将只允许你设置一个对象的所有者:
A:你自己
B:pipe理员组
而已。
但是,如果您是pipe理员或备份操作员,则可以将其设置为任何用户,但是此权限默认处于禁用状态,必须先启用才能执行此操作。 如果你想知道 – 这是一个有意义的安全限制。
有没有.NET或PowerShell特定的方式来实现这一点,但如果我们离开微软的领土,并访问PowerShell社区扩展项目,我们find一种方法…
我没有使用PSCX这么多,它不是一个微软的产品,所以任何问题应该被引导到www.codeplex.com/PowerShellCX而不是在这里,但是这里:
从www.codeplex.com/PowerShellCX下载并安装PSCX
使用以下语法为TokenPriviliege设置包装类:
$oTP = New-Object PSCX.Interop.TokenPriviliege
现在,将其授予当前进程:
Set-Privilege $oTP
您现在应该可以将文件夹的所有者更改为您希望的任何用户。
有趣的错误,你使用什么文件/path? 这是一个系统path,你是否以pipe理员(UAC)的身份运行PowerShell?
您的示例脚本将更新文件的所有者,因为它是$ acl的一部分。