脚本不会使用通配符设置权限

Script Won't Set Permissions with Wildcard

我编写了一个 PowerShell 脚本,用于在共享目录的 4000 多个文件夹中创建子文件夹 "Admin"(如果尚不存在)。创建子文件夹后,我需要子文件夹的权限仅适用于域中的特定组。我没有收到任何错误,除了子文件夹中的文件夹已经存在错误,但我让脚本 运行 运行了 12 个小时,但它从未完成。我停止了脚本,发现所有的 Admin 子文件夹都创建了,但是没有设置权限。

如果我在 $folder 中取出 * 通配符,添加输入文件夹名称,它就可以正常工作。我怎样才能让它与 * 通配符一起工作,这样我就不必手动输入超过 4000 个文件夹名称?

这是我的脚本:

# If the folder for Equipment Images does not exist, make a new one and set the correct permissions.
$Location = "E:\Images\Equipment\*\"
$file = "E:\Images\Equipment\*\Admin"
foreach ($_ in (Get-ChildItem E:\Images\Equipment\*\)) {
    if (($_.PSIsContainer -AND $_.name -eq "Admin")-eq $false) {
        New-Item -Path $location -Name "Admin" -ItemType directory
        $errorActionPreference = "continue"
    }
    $folder = "E:\Images\Equipment\*\Admin"
    $acl = Get-Acl $folder
    if ($acl.AreAccessRulesProtected) {
        $acl.Access | % {$acl.purgeaccessrules($_.IdentityReference)}
    } else {
        $isProtected = $true 
        $preserveInheritance = $false
        $acl.SetAccessRuleProtection($isProtected, $preserveInheritance) 
    }
    $account = "recoequip\folder sales group"
    $rights = [System.Security.AccessControl.FileSystemRights]::FullControl
    $inheritance = [System.Security.AccessControl.InheritanceFlags]"ContainerInherit,ObjectInherit"
    $propagation = [System.Security.AccessControl.PropagationFlags]::None
    $allowdeny = [System.Security.AccessControl.AccessControlType]::Allow

    $dirACE = New-Object System.Security.AccessControl.FileSystemAccessRule ($account,$rights,$inheritance,$propagation,$allowdeny)
    $ACL.AddAccessRule($dirACE)

    Set-Acl -aclobject $ACL -Path $folder
    Write-Host $folder Permissions added
}

只是不要将通配符与任何 Acl cmdlet 一起使用,我认为这不会起作用。

之前在循环中对单个文件夹设置权限,或者如果您以后必须这样做,只需循环遍历所有文件夹并对所有 admin 个文件夹分别设置权限,一个一个。

一些小技巧:

从 400 个文件夹的一小部分开始进行测试,然后写入托管当前处理的文件夹,以便您可以看到进度。

代码示例:

Get-ChildItem E:\Images\Equipment\ -Directory -Filter "admin" -Recurse | ForEach-Object {

  $acl = Get-Acl $_.FullName
   ... # do your permission stuff

}