我想更改C:驱动器的ACL .我想要做的是删除用户可以直接在驱动器上创建文件夹的权限.我在编写时在另一个文件夹上测试了脚本.它没有问题.完成后,我在我们的测试环境中尝试了实际驱动器上的脚本.我得到一个我无法弄清楚的错误.如果我手动删除权限它没有问题.有人有个主意吗?
$path = "C:\"
$colRights = [System.Security.AccessControl.FileSystemRights]"CreateDirectories"
$InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::None
$PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None
$objType =[System.Security.AccessControl.AccessControlType]::Allow
$objUser = New-Object System.Security.Principal.NTAccount("Authenticated Users")
$objACE = New-Object System.Security.AccessControl.FileSystemAccessRule ($objUser, $colRights, $InheritanceFlag, $PropagationFlag, $objType)
$objACL = Get-ACL $path
$objACL.RemoveAccessRule($objACE)
Set-ACL $path $objACL
Run Code Online (Sandbox Code Playgroud)
错误是:
Set-Acl : The security identifier is not allowed to be the owner of this object.
At C:\Users\mhodler\Desktop\Remove Permission.ps1:57 char:8
+ Set-ACL <<<< $path $objACL
+ CategoryInfo : InvalidOperation: (C:\:String) [Set-Acl], InvalidOperationException
+ FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.PowerShell.Commands.SetAclCommand
Run Code Online (Sandbox Code Playgroud)
UdK*_*.cH 64
我找到了答案.微软说
遗憾的
Get-Acl是缺少一些功能.即使您只想修改DACL,它也始终读取完整的安全描述符.这就是为什么Set-ACL即使你没有改变它也想写主人.使用该GetAccessControl方法可以指定要读取的安全描述符的哪个部分.
替换Get-Acl呼叫
$acl = (Get-Item $path).GetAccessControl('Access')
Run Code Online (Sandbox Code Playgroud)
小智 8
您需要SeRestorePrivilege设置所有者.我使用了来自以下URL的Lee Holmes的脚本来提升我的流程,并使用了这个额外的priv,并且能够将所有者设置为除我之外的其他人.
http://www.leeholmes.com/blog/2010/09/24/adjusting-token-privileges-in-powershell/
我尝试了这个(get-item $path).getaccesscontrol("access")方法但仍然遇到了同样的错误,因为我的进程没有SeRestorePrivilege.
| 归档时间: |
|
| 查看次数: |
30438 次 |
| 最近记录: |