使用 PowerShell Set-Acl 应用 ACL 权限

Applying ACL Permissions using PowerShell Set-Acl

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

你好,当我得到上面的代码并使用我自己的设置应用它时 - 为文件夹添加了用户帐户条目但是没有应用权限(none 打勾)

任何人都可以帮助解释为什么会这样吗?

谢谢

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

您的 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 已更改。如果您向下滚动复选框列表,您会注意到 "Special permissions" 已被选中,如果您单击 "Advanced",您会注意到您的权限已设置。

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

如 MSDN 中所述,FileSystemAccessRule has 4 constructors, where some accept InheritanceFlags and PropagationFlags (e.g. this one 符合您的需要)。如果您使用它们并定义继承行为,权限将显示为正常权限。

今天我在尝试编译 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