Powershell:递归获取目录权限

时间:2017-08-25 20:51:49

标签: powershell

我正在尝试获取如下所示的CSV输出,以便用户可以在Excel中进行过滤。

文件夹,组,权限 I:\ Folder1中,CORP \ 1组,READDATA,ExecuteFile,同步 I:\ Folder1中\ FOLDER2,CORP \组2,READDATA,ExecuteFile,同步

以下是开头的内容。效率非常低,无法提供所需的CSV输出。将不胜感激任何帮助。

$output_file = $(get-date -f MM-dd-yyyy_HH_mm_ss)+'.txt'
"{0},{1},{2}" -f "Folder","Groups","Permissions"| add-content -path $output_file


$file_content = ''

function GetFolders($path = $pwd)
{
    if( $path -ne $null) {
        $new_row = Get-ACL $path | select -ExpandProperty Access | Where-Object IdentityReference -Like "CORP*" | SELECT $path, IdentityReference, FileSystemRights | Format-Table -HideTableHeaders | Out-String
        $fileContent += $new_row
        $fileContent | add-content -path $output_file

        foreach ($item in Get-ChildItem $path)
        {
           if (Test-Path $item.FullName -PathType Container)
           {
                Write-Output $item.FullName
                GetFolders $item.FullName
                $new_row = Get-ACL $item.FullName | select -ExpandProperty Access | Where-Object IdentityReference -Like "CORP*" | SELECT $item.FullName, IdentityReference, FileSystemRights | Format-Table -HideTableHeaders | Out-String
                $fileContent += $new_row
                $fileContent | add-content -path $output_file
           }
        }
    }
}


GetFolders "J:\"

1 个答案:

答案 0 :(得分:1)

你走的是正确的道路但是偏离了道路。

Set-Content -Path $FileName -Value 'Folder,Groups,Permissions'

(Get-Acl -Path $Path).Access |
  Where-Object -Property IdentityReference -like 'corp*' |
  ForEach-Object {
      Add-Content -Path $FileName -Value "$Path,$($_.IdentityReference),$($_.FileSystemRights -replace '\s')"
  }

更加花哨一点(如果你想编辑子表达式中的代码或那种性质的东西)

$Val = {"$Path,$($_.IdentityReference),$($_.FileSystemRights -replace '\s')"}
... -Value (&$Val) ...