获取具有特定ACL的文件夹的名称

时间:2013-09-19 18:32:31

标签: powershell

我最近的任务是更新用户主驱动器上的权限结构。我有一个名为home的目录和home下面的每个用户的文件夹。在主级别有两个组,这些组被强制下载到每个用户文件夹。用户文件夹设置为从其父级继承,然后用户设置为仅访问其文件夹。

我正在尝试编写一个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 个答案:

答案 0 :(得分:1)

这样可以解决问题:

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

一些解释:

你的第二个例子中没有按照你想要的方式工作的原因是它从管道中的文件夹开始,然后被转换为符合你要求的ACL。但是,它现在转换为ACL,您想要文件夹 - 而不是实际的ACL。

因此,“技巧”是将文件夹保留在管道中,但过滤基于ACL的文件夹。这是通过在第二个where-object子句中嵌套另一个管道来实现的。

PS。可能有一种方法可以将寻找psicontainer的第一部分组合到第二个where子句中,但是让我们留下另一天。