Powershell 使用路径将Get ACL导出到CSV

Powershell 使用路径将Get ACL导出到CSV,powershell,export-to-csv,Powershell,Export To Csv,我正在使用PowerShell 4,并创建了一个脚本,该脚本获取文本文件中列出的共享,并将ACL信息输出到CSV文件。问题是我不知道如何让导出也包含文件夹路径。这是我的剧本: $InputFile = "C:\Folders.txt" $OutputFile = "C:\FolderPermissions.csv" $FolderList = Get-Content $InputFile ForEach ($Folder in $FolderList) { $Permissions =

我正在使用PowerShell 4,并创建了一个脚本,该脚本获取文本文件中列出的共享,并将ACL信息输出到CSV文件。问题是我不知道如何让导出也包含文件夹路径。这是我的剧本:

$InputFile = "C:\Folders.txt"
$OutputFile = "C:\FolderPermissions.csv"
$FolderList = Get-Content $InputFile

ForEach ($Folder in $FolderList)
{
    $Permissions = (Get-ACL $Folder).access
    $Report += $Permissions
}

$Report | Select-Object IdentityReference,FileSystemRights,IsInherited | Export-CSV $OutputFile -NoTypeInformation
我已经使用下面的行成功地添加和导出了单个文件夹,但是只要我合并对象,就只导出了列名,没有值

$Folder = "\\server\share"
$Name=Folder
$Permissions = (Get-ACL $Folder).access
$Permissions | Add-Member -MemberType NoteProperty -Name $Name -Value $Folder

$Permissions | Select-Object Folder,IdentityReference,FileSystemRights,IsInherited | Export-CSV $OutputFile -NoTypeInformation
解决方案:

再次感谢各位!MFT的回答稍加调整就解决了这个问题。这是我想要的过滤器的工作代码。请注意,.IsInherited筛选器使用-eq TRUE返回不正确的数据,但使用-ne FALSE成功地工作

$InputFile = "C:\Folders.txt"
$OutputFile = "C:\FolderPermissions.csv"
$FolderList = Get-Content $InputFile

ForEach ($Folder in $FolderList)
{
    $Permissions = (Get-ACL $Folder).access | ForEach-Object {$_ |
        Add-Member -MemberType NoteProperty -Name Folder -Value $Folder}
    $Report += $Permissions
}

$Report | Select-Object Folder,IdentityReference,FileSystemRights,IsInherited |
    Where {$_.Folder -ne $Null -and $_.IdentityReference -like "HARRAHS*" -and $_.IsInherited -ne "TRUE"} |
    Export-CSV $OutputFile -NoTypeInformation

你在正确的轨道上。向每个访问列表项添加路径属性将实现您的目标

# Get access list items of the folder
$Permissions = (Get-Acl -Path $Folder).Access | 

    # Add the path property and assign its value, -PassThru so the object is assigned to $Permissions
    ForEach-Object { $_ | Add-Member -MemberType NoteProperty -Name Path -Value $Folder -PassThru }

这将为您提供格式良好的CSV

$Items = (Get-ChildItem "D:\" -Recurse | Where { $_.PSIsContainer } | select fullname | %{$_.fullname.trim()})
$Path = "C:\temp\ACLs.csv"

$Table = @()
$Record = [ordered]@{
"Directory" = ""
"Owner" = ""
"FileSystemRights" = ""
"AccessControlType" = ""
"IdentityReference" = ""
"IsInherited" = ""
"InheritanceFlags" = ""
"PropogationFlags" = ""

}

Foreach ($Item in $Items)
{

$ACL = (Get-Acl -Path $Item)

$Record."Directory" = $ACL.path | %{$_.trimstart("Microsoft.PowerShell.Core\FileSystem::")}
$Record."Owner" = $ACL.Owner

Foreach ($SItem in $ACL.access)
{
$Record."FileSystemRights" = $SItem.FileSystemRights
$Record."AccessControlType" = $SItem.AccessControlType
$Record."IdentityReference" = $SItem.IdentityReference
$Record."IsInherited" = $SItem.IsInherited
$Record."InheritanceFlags" = $SItem.InheritanceFlags
$Record."PropogationFlags" = $SItem.PropagationFlags


$objRecord = New-Object PSObject -property $Record
$Table += $objrecord
}
}
$Table | Export-Csv -Path $Path -NoTypeInformation

看起来只是个打字错误。您将ACL存储在$Permissions中,但将成员添加到$Permission中。在创建问题期间,这是两个错误类型。现在已修复。您能提供与此解决方案一起使用的输入文件的格式吗?这很有效,但有一点需要注意。我正在用一个有2个共享的文件测试它,它所做的是导出CSV顶部的第二个共享ACL信息(不带路径),然后导出共享1和共享2的信息(带路径)。我把空白排过滤掉,现在效果不错。但是,当添加更多筛选器以便仅导出未继承的域帐户和权限时,它会阻塞。有什么想法吗?这是我的过滤管道:{$\.path-ne$null-和$\.IdentityReference-包含HARRAHS-和$\.IsInherited-eq FALSE}找到了它。我改成了,像哈拉一样,而且是真的。再次感谢@阿卡吉姆,你知道你为什么需要身份证明吗?