使用powershell设置文件系统ACE

时间:2017-10-02 23:02:08

标签: powershell

我正在尝试使用powershell设置文件ACE。我无法通过对set-acl的同一调用来设置多个权限。

所以已经使用了函数并为我想要的每个权限授予调用函数。但是,set-acl未能同时设置“修改”和“写入”权限。我现在很困惑。

我运行脚本并且只获取写权限集。函数运行没有错误,但我没有得到正确的ACE集。

我真的不明白为什么第二次调用addaccessrule会破坏第一次调用?

$StartingDir1 = "C:\_WPCYB"
$StartingDir2 = "C:\Program Files\Adobe\Adobe InDesign CC 2017\Plug-Ins"
$WcolRights = [System.Security.AccessControl.FileSystemRights]"Write" 
$McolRights = [System.Security.AccessControl.FileSystemRights]"Modify"
$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("HA\Domain Users") 

function set-perm-on-dir ($dir, $perm) {
    # handle the starting directory itself, d1
    echo setting perms on directory $dir setting $perm
    $objACE = New-Object System.Security.AccessControl.FileSystemAccessRule($objUser, WcolRights, $InheritanceFlag, $PropagationFlag, $objType) 
    echo "New ACE is " $objACE
    $d1 = Get-Item $StartingDir1
    $acla = get-acl $d1
    $acla.AddAccessRule($objACE)
    set-acl -Path $d1.FullName -AclObject $acla
}

set-perm-on-dir -dir $StartingDir1 -perm $WcolRights 
set-perm-on-dir -dir $StartingDir1 -perm $McolRights

1 个答案:

答案 0 :(得分:1)

NTFS权限是使用本机命令设置的噩梦,我个人使用File System Security Module来执行此操作,因为它更容易理解(其命令就像您使用GUI执行的操作)。

要为Modify禁用继承并授予Domain\User权限,它只需要两个简单的命令:

$folder = "C:\folder"

Get-Item $folder | Disable-NTFSAccessInheritance
Get-Item $folder | Add-NTFSAccess -Account "Domain\User" -AccessRights Modify

修改

大多数模块都不包含在PowerShell中,您必须下载并安装它们。

PowerShell Gallery可以使用prerequisites提供大量这些内容,并且可以使用Install-Module -Name ModuleName进行安装(此命令原生于PS v5 +,但如果您使用的话需要{{3}}旧版本)

因此,对于我在上面使用的模块:Install-Module -Name NTFSSecurity