【发布时间】:2016-08-29 14:18:30
【问题描述】:
我需要解决的问题是我需要在网络共享上为新创建的用户创建一个文件夹。这是由 System Center Orchestrator 完成的,在创建用户后,我需要复制一个具有某些权限的虚拟文件夹,在 ACL 中添加新创建的用户并从这些 ACL 中删除工作流帐户。 (创建文件夹的用户会自动添加。)
文件夹成功创建并获得与虚拟文件夹相同的权限,现在我需要为这些权限添加 1 个 ACL 规则。
这是我正在使用的一些示例代码:
$colRights = [System.Security.AccessControl.FileSystemRights]"Read, Write"
$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("domain\createdUser1")
$objACE = New-Object System.Security.AccessControl.FileSystemAccessRule (
$objUser, $colRights, $InheritanceFlag, $PropagationFlag, $objType
)
$originalACL = Get-ACL "\\shares\createdUser1"
#$orignalACL.SetAccessRuleProtection($True,$False)#doesn't help either
$originalACL.AddAccessRule($objACE)
Set-ACL "\\shares\createdUser1" $objACL
我遇到的唯一问题是它没有添加 ACL 规则,但它会覆盖此文件夹当前拥有的所有规则。如何在不覆盖原始规则的情况下向现有 ACL 添加 1 条规则?
源示例代码:https://technet.microsoft.com/en-us/library/ff730951.aspx
编辑1:
使用https://blogs.technet.microsoft.com/heyscriptingguy/2014/11/22/weekend-scripter-use-powershell-to-get-add-and-remove-ntfs-permissions/ 上提供的模块做同样的事情。我做错了吗?
$colRights = "Read, Write"
$objUser = New-Object System.Security.Principal.NTAccount("domain\createdUser1")
Add-NTFSAccess -Path $folderPath -Account $objUser -AccessRights $colRights
【问题讨论】:
-
您发布的代码已注释
SetAccessRulProtection(),因此不应删除现有的ACL。此外,如果这样做的目的是创建用户主目录,您可能需要查看this。 -
它不适用于主目录,仅用于共享文件夹。他们通过 GPO 访问它。这是故意注释掉的,因为它最后说即使这样也行不通。
-
重复我自己:由于您不使用
SetAccessRulProtection(),您的代码不会删除现有的 ACL。 -
也在重复我自己。使用
SetAccessRuleProtection()没有帮助。 -
没有人告诉你无论如何都要使用它。
标签: powershell permissions automation directory acl