1

我最近的任务是更新我们用户主驱动器上的权限结构。我有一个名为 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}

有任何想法吗?希望我的要求是有意义的。

4

1 回答 1

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 子句中,但让我们改天再说。

于 2013-09-20T02:45:02.947 回答