Назад | Перейти на главную страницу

ACL PS Script - зависает на 08 R2 PS v3; отлично работает на W8 PS v4

Этот сценарий был разработан, чтобы значительно упростить применение разрешений на новом сервере. В настоящее время он этого не делает :(

По какой-то причине он отлично работает на моей машине с Win 8, где я это сделал. Когда я запускаю его на целевой машине, сервере 2008 R2, он просто зависает в первом каталоге.

Не уверен, что версия PS слишком важна между v3 и v4 - сценарий довольно прост: - Коробка Windows Server 2008 R2 - PowerShell v3 - Коробка Windows 8 - PowerShell v4

Кто-нибудь знает, почему это может быть?

$csvFile = Read-Host "path to the CSV file with permissions"
$csv = Import-Csv $csvFile

Write-Host "Imported CSV File"

function applyPermissions {
    Param(
        [string]$Permission,
        [string]$Group,
        [string]$Dir,
        [bool]$Enclosed
    )

    if ($Enclosed) {
        $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($Group,$Permission,"ObjectInherit, ContainerInherit","None","Allow")
        $Dir = $Dir.Replace("\*","")
        $acl = Get-Acl $Dir
        $acl.SetAccessRule($rule)
        Set-Acl $Dir $acl
    }
    else {
        $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($Group,$Permission,"ObjectInherit","NoPropagateInherit","Allow")
        $acl = Get-Acl $Dir
        $acl.SetAccessRule($rule)
        Set-Acl $Dir $acl
    }
}

foreach ($r in $csv) {
    Write-Host "Processing: $r"

    $perm = $r.Permission
    $grp = $r.Group
    $dr = $r.Path

    # enclosed needs to apply recursively
    $enc = $false
    if($dr -match "\*") { $enc = $true } else { $enc = $false }

    if ($perm -eq "ReadWrite") {
        applyPermissions  -Permission "ReadAndExecute, Write" -Group $grp -Dir $dr -Enclosed $enc
    }
    else {
        applyPermissions -Permission $perm -Group $grp -Dir $dr -Enclosed $enc
    }
}

РЕДАКТИРОВАТЬ: