【问题标题】:Applying ACL Permissions using PowerShell Set-Acl使用 PowerShell Set-Acl 应用 ACL 权限
【发布时间】:2017-03-24 10:43:01
【问题描述】:
New-Item -Type Directory -Path "C:\MyFolder"
$Acl = Get-Acl "C:\MyFolder"
$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule("username", "FullControl", "Allow")
$Acl.SetAccessRule($Ar)
Set-Acl -Path "C:\MyFolder" -AclObject $Acl

您好,当我获得上述代码并使用我自己的设置应用它时 - 为文件夹添加了用户帐户条目,但没有应用任何权限(未勾选)

谁能帮忙解释一下为什么会这样?

谢谢

【问题讨论】:

  • 你的 sn-p 对我有用。你有任何错误信息吗? UnauthorizedAccessException?
  • 没有错误 - 帐户被添加到文件夹中的 sec 权限中 - 您可以在那里看到它们,但没有勾选权限。我实际运行的唯一区别是我使用存储在其中的用户帐户引用了一个变量 - 但它的工作原理是 - 否则,该帐户不会出现在那里。
  • 很难理解你的问题。希望我明白了。请考虑查看您的问题并添加一些附加信息和屏幕截图,以便其他人理解您的意思。 (我个人认为这个问题更好地放在超级用户身上)
  • 如果我的回答解决了您的问题,请将其标记为已接受的答案。谢谢!

标签: powershell acl


【解决方案1】:

您的评论描述了以下行为:

您的 PowerShell 脚本成功,但如果您使用资源管理器属性对话框检查权限,您将看到以下内容:

这很令人困惑,因为 PowerShell 查询会确认:

PS> Get-Acl .|fl


Path   : Microsoft.PowerShell.Core\FileSystem::D:\temp\myfolder
Owner  : clijsters\clijsters
Group  : clijsters\Kein
Access : clijsters\NEWUSER Allow  FullControl
        VORDEFINIERT\Administratoren Allow  FullControl
        VORDEFINIERT\Administratoren Allow  268435456
        NT-AUTORITÄT\SYSTEM Allow  FullControl
        [...]

您的 ACL 已更改。如果您向下滚动复选框列表,您会注意到“特殊权限”已被选中,如果您点击“高级”,您会注意到您的权限已设置。

编辑:
正如@AnsgarWiechers 所提到的,我错过了描述为什么使用New-Object System.Security.AccessControl.FileSystemAccessRule("username", "FullControl", "Allow") 添加的权限被列为特殊权限 的部分。

如 MSDN 上所述,FileSystemAccessRule 有 4 个构造函数,其中一些接受 InheritanceFlagsPropagationFlags(例如,this one 适合您的需求)。如果您使用它们并定义继承行为,则权限将显示为正常权限。

【讨论】:

  • 谢谢!作为更广泛的脚本解决方案的一部分,添加文件夹权限是一种非常酷的方式。
  • 权限显示为“特殊权限”的原因是因为您没有定义继承,所以权限应用到“仅此文件夹”。将容器和对象继承添加到 ACE,权限将显示为“常规”完全控制。
  • 我不明白为什么这个答案是不接受。只是偶然在我的个人资料上看到了它。 @Royston:你能解释一下,我可以改进我的答案吗?
  • @Clijsters 现在归类为答案。谢谢
【解决方案2】:

今天我试图编译 ILSpy 并遇到了AL1078: Error signing assembly 这是一个权限问题。显示了答案的合并。

此 powershell 脚本将 $CurUsr 分配给当前登录用户的令牌,并将 $CurTgt 作为其权限正在更改的文件夹。根据需要更改它们。

添加权限:

$CurTgt = "C:\Users\All Users\Microsoft\Crypto\RSA\MachineKeys"
$CurUsr = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
$acl = Get-Acl $CurTgt
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($CurUsr,"FullControl","ContainerInherit,ObjectInherit","None","Allow")
$acl.SetAccessRule($AccessRule)
$acl | Set-Acl $CurTgt

删除权限:

$CurTgt = "C:\Users\All Users\Microsoft\Crypto\RSA\MachineKeys"
$CurUsr = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
$acl = Get-Acl $CurTgt
$usersid = New-Object System.Security.Principal.Ntaccount ($CurUsr)
$acl.PurgeAccessRules($usersid)
$acl | Set-Acl $CurTgt

参考资料:

Manage ACLs Inheritance Current User

【讨论】:

    猜你喜欢
    • 2015-11-27
    • 2021-03-21
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多