Powershell用于定位未从上述文件夹继承的用户或组

时间:2017-08-09 15:14:08

标签: powershell

我正在寻找一种方法来编写一个powershell脚本,该脚本将返回包含未继承的用户或组的所有文件夹的结果。我尝试为非继承文件夹运行脚本,但其中一些是继承的...同时拥有稍后添加的用户/组而不禁用文件夹的继承。

这是我找到的脚本:

DIR "\\path\abc" -directory -recurse | GET-ACL | where {$_.Access.IsInherited -eq $false}|Select-Object PSPATH |Export-Csv "c:\export.csv" -NoTypeInformation

此脚本的问题是它读取文件夹继承,而不是用户/组。什么是powershell cmdlet以无需继承来定位用户/组?

以下是相关文件夹的示例:

http://imgur.com/ng58DDi

1 个答案:

答案 0 :(得分:0)

我认为ACL逻辑实际上是正确的。我猜select-object PSPATH...你可能在导出数据之前无意中修改了数据。

如果我这样做:

(get-acl FolderName).Access

我可以清楚地看到,直接在此ACL上设置的任何项目都具有IsInherited属性,该属性设置为false。

Pipelines面临的挑战之一是您经常处于没有先前作用域数据的作用域中。这样做的诀窍就是要知道什么时候进入一个foreach而不是继续深入管道。试试这个:

$NonInheritedPermissions = @()
dir -directory -recurse | % {
  $staticACLEntry = (get-acl $_).access | where {$_.IsInherited -eq $false}
  $NonInheritedPermissions += "Path:$($_.fullname);Identity:$(staticACLEntry.IdentityReference);FileSystemRights:$(staticACLEntry.FileSystemRights)"
}
$NonInheritedPermissions | export-csv some.csv

这是快速而又脏的,但如果您想要更好地进行格式化,您应该能够看到如何打破各个属性。我通常会将这样的数据投入到PS对象中,但我会走出门。