none
Powershell скрипт RRS feed

  • Вопрос

  • Доброго времени суток. Столкнулся с проблемой при попытке использовать данный скрипт. Стоит задача переназначить права пользователям домена на несколько сотен папок. Сам написал скриптец но с ним не очень вышло. Нашел на просторах интернета более

    подходящий.

    Вот собственно его код:

    param (
    [string]$FolderListFile = $(throw "Укажите файл со списком папок, аккаунтов и прав с помощью ключа -FolderListFile.")
    )
     
    $FolderList=Import-Csv $FolderListFile -Delimiter ";"
     
    $InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor [System.Security.AccessControl.InheritanceFlags]::ObjectInherit
    $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None 
     
    $FolderList | ForEach-Object {
        if (Test-Path $_.Folder)
        {
            if (Test-Path $_.Folder -pathtype container){
                $InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor [System.Security.AccessControl.InheritanceFlags]::ObjectInherit
                } else {
                $InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::None
                }
            $acl = Get-Acl $_.Folder
            if ($_.BlockInherit -eq "Yes"){
                #Отключаем наследование прав от родителя с сохранением текущих прав.
                $acl.SetAccessRuleProtection($True, $True)
                Set-ACL $_.Folder $acl
                $acl = Get-ACL $_.Folder
            }
            if ($_.AccessRights -eq "Remove"){
                #Удаляем аккаунт/группу из ACL(Access Control List)     
                $AccessRights = [System.Security.AccessControl.FileSystemRights]"Read"
                $AccessControlType =[System.Security.AccessControl.AccessControlType]::Allow 
                if ($_.SecIdentity -eq $acl.Group){
                    $objACL.SetGroup([System.Security.Principal.NTAccount]"BUILTIN\Administrators")
                }
                $ace = New-Object System.Security.AccessControl.FileSystemAccessRule `
                    ($_.SecIdentity, $AccessRights, $InheritanceFlag, $PropagationFlag, $AccessControlType) 
                $acl.RemoveAccessRuleAll($ace) 
                Set-ACL $_.Folder $acl
            }else{
                #Добавляем ACE(access control entry) в ACL(Access Control List)
                $ace = New-Object System.Security.AccessControl.FileSystemAccessRule `
                    ($_.SecIdentity, $_.AccessRights, $InheritanceFlag, $PropagationFlag, $_.AccessControlType) 
                $acl.AddAccessRule($ace) 
                Set-ACL $_.Folder $acl         
            }
        } else {
            Write-Host "$_.Folder не существует!" -ForegroundColor Red
        }
    }

    Все бы ничего но когда запускаю вывливаются 2 ошибки. В сети поковырялся ничего толкового не нашел.



    • Перемещено Alexander RusinovModerator 9 октября 2017 г. 12:44 Вопрос по PowerShell
    • Изменено Cryopsy 9 октября 2017 г. 12:53
    9 октября 2017 г. 12:34

Ответы

  • Import-Csv $FolderListFile -Delimiter ";" -Header ....          Заголвки добавьте для начала.

    В ковычки заберите путь(-FolderListFile)

    • Изменено Daniil Sedov 9 октября 2017 г. 13:30
    • Предложено в качестве ответа Vector BCOModerator 9 октября 2017 г. 15:15
    • Помечено в качестве ответа Cryopsy 9 октября 2017 г. 16:27
    9 октября 2017 г. 13:27
  • Всё правильно, только в файл их не обязательно добавлять. достаточно указать их при импорте.
    • Помечено в качестве ответа Cryopsy 10 октября 2017 г. 10:14
    10 октября 2017 г. 5:40

Все ответы