2013-09-19 3 views
1

У меня недавно была задача обновления структур разрешений на наших домашних дисках пользователя. У меня есть каталог под названием home и папка для каждого пользователя ниже дома. На домашнем уровне есть две группы, и они приводятся к каждой из пользовательских папок. Папки пользователя устанавливаются как наследуемые от их родителя, а затем пользователь получает доступ только к своей папке.Получение имени папки с определенным ACL

Я пытаюсь написать сценарий powershell, который покажет мне, если какие-либо папки имеют определенный ACL, оставленный позади. Это то, с чем я столкнулся, и похоже, что он возвращает список подпапок для указанного каталога, где мне нужны только папки с указанным ACL.

$path = "\\server\share" 
$folders = Get-ChildItem $path | where {$_.psiscontainer} 

foreach ($folder in $folders) 


{ 
$domain = "domname" 
$aclname = "ACLname" 
$aclfullname ="$domain\$aclname" 

Get-Acl | select -ExpandProperty Access | where {$_.identityreference -contains $aclfullname} 

Write-Host $folder.FullName 

} 

Если я использую следующий, он возвращает только один результат, но он возвращает ACL, а не имя папки.

$path = "\\node1\home" 
$domain = "morgan-cole" 
$aclname = "gsherlock" 
$aclfullname ="$domain\$aclname" 

Get-ChildItem $path | where {$_.psiscontainer} | Get-Acl | select -ExpandProperty Access | where {$_.identityreference -contains $aclfullname} 

Любые идеи? Надеюсь, мои требования имеют смысл.

ответ

1

Это будет делать трюк:

Get-ChildItem $path | where {$_.psiscontainer} | where { $_ | Get-Acl | select -ExpandProperty Access | where {$_.IdentityReference -contains $aclfullname}} 

Некоторые пояснения:

Причина, почему ваш не работает так, как вы хотели во втором примере, что она начинается как папки в конвейер, но затем преобразуется в ACL, который соответствует тому, что вы ищете. Однако теперь он преобразован в ACL, и вы хотите, чтобы папка была не фактическим ACL.

Итак, «трюк» заключается в том, чтобы сохранить папку в конвейере, но фильтр папка на основе ACL. Это достигается путем вложенности другого конвейера во второе предложение where-object.

PS. Вероятно, есть способ объединить первую часть, которая ищет psicontainer во втором, где предложение, но давайте оставим это на другой день.

+0

Точно, что я был после. Огромное спасибо! –

Смежные вопросы