Установить ReadOnly ACL рекурсивно - PullRequest
0 голосов
/ 31 октября 2019

Я хочу рекурсивно установить тип доступа «Только чтение» для папки и ее подпапок, используя следующий скрипт:

Любая помощь, пожалуйста?

$list = import-csv "C:\Users\s849668adm\Desktop\Grouptest.txt"

foreach($sg in $list) {

$grp = $sg.Group

$colRights = [System.Security.AccessControl.FileSystemRights]"ReadANDExecute"

$InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]:: ContainerInherit
$PropagationFlag = [System.Security.AccessControl.PropagationFlags]:: None

$objType =[System.Security.AccessControl.AccessControlType]::Allow

$objUser = New-Object System.Security.Principal.NTAccount($grp)

$objACE = New-Object System.Security.AccessControl.FileSystemAccessRule `
    ($objUser, $colRights, $InheritanceFlag, $PropagationFlag, $objType)

$objACL = Get-ACL "C:\Users\s849668adm\Desktop\Test"
$objACL.SetAccessRule($objACE)
Set-ACL "C:\Users\s849668adm\Desktop\Test" $objACL 
}

Скрипт работает, но если ACLустановлен в подпапке, сценарий не меняет тип доступа, а вместо этого дублирует новое в родительской папке «C: \ Users \ s849668adm \ Desktop \ Test» с типом доступа ReadOnly.

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Сценарий ниже работал, но исключил родительскую папку "C: \ Users \ s849668adm \ Desktop \ Test"

    $list = import-csv "C:\Users\s849668adm\Desktop\Grouptest.txt"

    foreach($sg in $list) {

    $grp = $sg.Group

    $colRights = [System.Security.AccessControl.FileSystemRights]"ReadANDExecute"

    $InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]:: 
     ContainerInherit
    $PropagationFlag = [System.Security.AccessControl.PropagationFlags]:: None

    $objType =[System.Security.AccessControl.AccessControlType]::Allow

    $objUser = New-Object System.Security.Principal.NTAccount($grp)

    $objACE = New-Object System.Security.AccessControl.FileSystemAccessRule `
   ($objUser, $colRights, $InheritanceFlag, $PropagationFlag, $objType)

    $folder = Get-ChildItem  -path "C:\Users\s849668adm\Desktop\Test" -Recurse
      ForEach ($fl in $folder) 
          {

            echo $fl
            $objACL = Get-ACL $fl.PSPath
            $objACL.SetAccessRule($objACE)
            Set-ACL $fl.PSPath  $objACL 
          }

                               }
0 голосов
/ 31 октября 2019

Я думаю, что вам не хватает ObjectInherit наследия.Флаг.
Кроме того, в PowerShell есть более удобный способ создания правила доступа:

$folder = "C:\Users\s849668adm\Desktop\Test"
Import-Csv "C:\Users\s849668adm\Desktop\Grouptest.txt" | ForEach-Object {
    $grp = New-Object System.Security.Principal.NTAccount($_.Group)
    # create the new access rule
    $ace = New-Object System.Security.AccessControl.FileSystemAccessRule($grp, "ReadAndExecute", "ContainerInherit,ObjectInherit", "None", "Allow")
    $acl = Get-ACL $folder
    $acl.SetAccessRule($ace)
    $acl | Set-ACL $folder
}

Надеюсь, что поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...