Powershell пытается применить группу к папке, которая применяется только к этой папке - PullRequest
0 голосов
/ 04 ноября 2019

У меня такая же проблема, как и у "леосенко". Мой сценарий ниже;

$groupperm = @(
('(RW)',$readwrite,$inheritanceFlag,$propagationFlag),
('(RO)',$readonly,$inheritanceFlag,$propagationFlag),
('(LF)',$Listfolder,'None','None'))

foreach ($group in $groupperm){
        $grouptxt = "FS1-$groupname " + $group[0]
        $accessControlEntry = New-Object System.Security.AccessControl.FileSystemAccessRule @($grouptxt, $group[1], $group[2], $group[3], $type)
        $objACL.AddAccessRule($accessControlEntry)
        Set-ACL $folderpath $objACL
        $accessControlEntry
        }

Группы применяются к $ folderpath просто отлично, но в последней группе "применяется к" вместо того, чтобы быть "Только эта папка", это "Эта папка, подпапки и файлы"согласно другим.

Если я проверяю ACL с (Get-ACL $folderpath).Access, я получаю

FileSystemRights  : Read, Synchronize
AccessControlType : Allow
IdentityReference : MELTD\FS1-testing (LF)
IsInherited       : False
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None

для последней группы, но вывод из $ accesscontrolentry при запуске сценария (дляпоследняя группа) показывает;

FileSystemRights  : Read, Synchronize
AccessControlType : Allow
IdentityReference : FS1-testing (LF)
IsInherited       : False
InheritanceFlags  : None
PropagationFlags  : None

Может ли кто-нибудь пролить мне свет?

заранее спасибо,

Пол.

РЕДАКТИРОВАТЬ .. Хорошо, после некоторого тестирования ... если я установлю разрешение с помощью

icacls $folderpath /grant $grouptxt":(R)"

, я получу желаемый набор разрешений "только для этой папки", однако, если я добавлю эту строку в сценарий и приму только первуюдва разрешения одна и та же строка устанавливает разрешение для «этой папки, вложенных папок и файлов», например

$groupperm = @(
        ('(RW)',$readwrite,$inheritanceFlag,$propagationFlag),
        ('(RO)',$readonly,$inheritanceFlag,$propagationFlag)        
        )
        $grouptxt = 'FS1-'+$groupname+' (LF)'
        icacls $folderpath /grant $grouptxt":(R)"

        foreach ($group in $groupperm){
            $grouptxt = "FS1-$groupname " + $group[0]
            $accessControlEntry = New-Object System.Security.AccessControl.FileSystemAccessRule @($grouptxt, $group[1], $group[2], $group[3], $type)
            $objACL.AddAccessRule($accessControlEntry)
            Set-ACL $folderpath $objACL
            $accessControlEntry
            }

Что-то очень сломано!

1 Ответ

0 голосов
/ 04 ноября 2019

Попробуйте установить для InheritanceFlags только ObjectInherit

[Обновить]

Я думаю, что получил следующее:

$ACL = Get-Acl "C:\test"

$Rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Users","FullControl","ObjectInherit,ContainerInherit","None","Allow")
$ACL.RemoveAccessRule($Rule)
Set-ACL $ACL.Path $ACL

$Rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Users","FullControl","None","None","Allow")
$ACL.AddAccessRule($Rule)
Set-ACL $ACL.Path $ACL

Как видите, ясначала пришлось удалить существующее правило, затем изменение InheritanceFlag во втором правиле изменяет то, что отображается в столбце «Применяется к».

ObjectInherit, ContainerInherit = Эта папка, подпапки и файлыObjectInherit = Эта папка и файлыContainerInherit = Эта папка и подпапкиНет = только эта папка

У меня была только быстрая игра, и я не очень хорош, когда дело доходит до Powershell или любого программирования, поэтому я надеюсь, что это поможет.

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