使用PowerShell为大量文件设置文件权限

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用PowerShell为大量文件设置文件权限相关的知识,希望对你有一定的参考价值。

我有两个文件,一个包含安全组列表,另一个包含相应的文件夹路径。我需要做的就是遍历这些文件并将正确的安全组递归RW访问应用到正确的文件夹。

因此第1行的安全组将应用于第1行的文件夹。

Powershell脚本:

foreach ($group in gc c:	empsecuritygroups.txt) {
    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule ($group, 'Modify','ContainerInherit,ObjectInherit', 'None', 'Allow')

    foreach ($folder in gc c:	empfolders.txt) {
        $acl = Get-Acl $folder
        $acl.SetAccessRule($rule)
        Set-Acl $folder $acl
    }
}

securitygroups.txt

securitygroup1
securitygroup2
securitygroup3
securitygroup4
securitygroup5
securitygroup6
securitygroup7
securitygroup8
securitygroup9
securitygroup10

folders.txt

D:sharesprojectsproject1
D:sharesprojectsproject2
D:sharesprojectsproject3
D:sharesprojectsproject4
D:sharesprojectsproject5
D:sharesprojectsproject6
D:sharesprojectsproject7
D:sharesprojectsproject8
D:sharesprojectsproject9
D:sharesprojectsproject10

目前,securitygroups.txt中的每个安全组都被添加到列表中的每个文件夹中,这不是我想要的,我希望securitygroup1添加到project1securitygroup2添加到project2等。

答案

将两个文件读入变量,然后使用for循环同时迭代两个数组:

$groups  = Get-Content 'c:	empsecuritygroups.txt'
$folders = Get-Content 'c:	empfolders.txt'

for ($i=0; $i -lt $folders.Count; $i++) {
    $rule = New-Object Security.AccessControl.FileSystemAccessRule ($groups[$i], 'Modify', 'ContainerInherit,ObjectInherit', 'None', 'Allow')
    $acl = Get-Acl $folders[$i]
    $acl.SetAccessRule($rule)
    Set-Acl $folders[$i] $acl
}

以上是关于使用PowerShell为大量文件设置文件权限的主要内容,如果未能解决你的问题,请参考以下文章

在不同文化中使用 PowerShell 设置文件夹权限

使用 set-acl 和 powershell 设置继承和传播标志

使用PowerShell为库中的SharePoint文件夹授予Active-Directory-Synced组权限

powershell遍历文件夹设置权限,解决文件无法删除的问题。

PowerShell 设置高级 NTFS 权限

PowerShell 修复 Robocopy的权限问题