递归列出网络共享中的文件夹和子文件夹,并列出组

时间:2016-01-21 15:03:05

标签: powershell

不幸的是,我对PowerShell并不太精通,而我的谷歌技能还没有解决我的问题。

到目前为止,我必须遵循以下脚本:

Get-childitem \\network\share\ -recurse | where{$_.psiscontainer} |
Get-Acl | % {
    $path = $_.Path
    $_.Access | % {
        New-Object PSObject -Property @{
            Folder = $path.Replace("Microsoft.PowerShell.Core\FileSystem::","")
            Access = $_.FileSystemRights
            Control = $_.AccessControlType
            User = $_.IdentityReference
            Inheritance = $_.IsInherited
            }
        }
    } | ? {-not $_.Inheritance} | export-csv output.csv -force

其中(部分)给了我以下输出:

User                                       Folder
$DOMAIN\network_share_sub1_write            \\network\share\sub1
$DOMAIN\network_share_sub1_read             \\network\share\sub1
$DOMAIN\network_share_sub1_subsub1_write    \\network\share\sub1\subsub1
$DOMAIN\network_share_sub2_write            \\network\share\sub2

这里的问题是我必须查找每个组以查看相应的用户。我想拥有的是这样的:

User    Permission Folder
$User1   write      \\network\share\sub1
$User2   read       \\network\share\sub1
$User3   write      \\network\share\sub1\subsub1
$User1   write      \\network\share\sub2

这样的事情可能吗? 提前谢谢。

2 个答案:

答案 0 :(得分:2)

Get-childitem \\network\share\ -recurse | where{$_.psiscontainer} |
Get-Acl | % {
    $path = $_.Path
    $_.Access | % {
        New-Object PSObject -Property @{
            Folder = $path.Replace("Microsoft.PowerShell.Core\FileSystem::","")
            Access = $_.FileSystemRights
            Control = $_.AccessControlType
            User = $_.IdentityReference
            Inheritance = $_.IsInherited
            }
        }
    } | select-object -Property User, Access, Folder | export-csv output.csv -force

select-object -Property User,Access,Folder
代码将重新排列订单,您将看到您想要的内容。

User    Permission Folder
$User1   write      \\network\share\sub1
$User2   read       \\network\share\sub1
$User3   write      \\network\share\sub1\subsub1
$User1   write      \\network\share\sub2

答案 1 :(得分:0)

我建议使用这个帮助我很多的脚本https://jfrmilner.wordpress.com/2011/05/01/audit-ntfs-permissions-powershell-script/,并根据您的选择进行编辑。

例如,我只想深入两个级别,所以我将Get-PathPermissions.ps1的第11行更改为:

$containers = Get-ChildItem -path $Path,$Path\*\* | ? {$_.psIscontainer -eq $true}

此外,您可以使用Sort-Object Path对文件夹进行排序,以便从顶部到所需文件夹(由深度指定)具有完整的层次结构。比方说,如果你想要深入三个级别,而不是两个级别,它应该像Get-ChildItem -path $Path,$Path\*\*,$Path\*\*\*那样......等等。