Windows 2012 R2上的redirect文件夹权限

我有一个2012R2文件服务器( server-docs )和一个2012R2 Citrix XenApp / RDS服务器( server-rds )。 用户必须是UsersRDS成员才能loginserver-rds

这里是我的文件redirect的GPO设置:

  • 基本:将每个人的文件夹redirect到相同的位置
  • 为根path下的每个用户创build一个文件夹
  • 根文件夹: \\server-docs\UserDocs
  • 专有权利未经检查

我从MS跟随这篇文章来设置根文件夹的权限: https : //technet.microsoft.com/en-us/library/cc737633%28v=WS.10%29.aspx

  • 所有者:完全控制,仅子文件夹和文件
  • UsersRDS :列出文件夹/读取数据,创build文件夹/附加数据 – 仅此文件夹
  • pipe理员:完全控制
  • 系统:完全控制,这个文件夹,子文件夹和文件

当我用TestUserloginserver-rds时,发生文件夹redirect,并得到一个文件夹\\server-docs\UserDocs\TestUser\Documents

TestUser和它的子DocumentsDocuments具有相同的权限:

  • 所有者:完全控制,仅子文件夹和文件
  • UsersRDS :列出文件夹/读取数据,创build文件夹/附加数据 – 仅此文件夹
  • pipe理员:完全控制
  • 系统:完全控制,这个文件夹,子文件夹和文件
  • TestUser :完全控制,仅此文件夹

我有另一个2003年的文件服务器和一个2003 RDS服务器,具有相同的根文件夹权限我只在用户文档文件夹:

  • pipe理员:完全控制
  • TestUser :完全控制

如果我选中Grant the user exclusive Rights on Document folder GPO中Grant the user exclusive Rights on Document folder ,请在server-rds上运行gpupdate /force ,则server-rds无法在login时执行文件夹redirect,并且得到事件ID 1085: Windows failed to apply folder redirection settings.

我如何禁用inheritance为用户文件获得相同的权限(如我的2003服务器)?

由于奇怪的ACL似乎是由devise,我必须检查,并在用户loginPowershell脚本时,如果需要更改它们:

 Function Repair-UserFullControlACL { Param( [Parameter(Mandatory=$true)] [ValidateScript({Test-Path $_ -PathType "Container"})] [string]$Folder ) # We also add System account and local administrators (Replace these french account names if needed) $OtherAccounts = @("AUTORITE NT\Système", "BUILTIN\Administrateurs", "CREATEUR PROPRIETAIRE") # `FullControl` for the user $ACLUser = New-Object System.Security.Principal.NTAccount($FullUserName) $Rule = New-Object System.Security.AccessControl.FileSystemAccessRule($ACLUser, "FullControl", "ContainerInherit, ObjectInherit", "None", "Allow") # We need the actual folder ACL $Acl = Get-ACL $Folder # Checking if everything already OK... $RuleOK = $False ForEach ($ACLRule in $Acl.Access){ If (-not(Compare-Object ($Rule | Format-List * | Out-String -Stream) ($ACLRule | Format-List * | Out-String -Stream))){ $RuleOK = $True break } } # Adding fullControl if needed If (-not($RuleOK)){ Try{ $Acl.AddAccessRule($Rule) ForEach ($Account in $OtherAccounts){ $ACLAccount = New-Object System.Security.Principal.NTAccount($Account) $Rule = New-Object System.Security.AccessControl.FileSystemAccessRule($ACLAccount, "FullControl", "ContainerInherit, ObjectInherit", "None", "Allow") $Acl.AddAccessRule($Rule) } # Saving ACL Set-ACL $Folder $Acl -ErrorAction Stop }catch{ Write-Warning "Erreur : Impossible d'accorder le droit 'FullControl' à l'utilisateur sur $Folder : $($_.Exception.Message)" } }} 

例如:

 Repair-UserFullControlACL "\\server\shared\userHomeDir"