Powershell: 获取指定深度的非继承目录的ACL信息

作者: lesca 分类: Powershell,Tutorials,Windows 发布时间: 2012-10-24 12:39

该Powershell脚本首先通过Get-ChildItemToDepth函数获取C盘下3层子目录的所有内容,然后通过管道导入getDirAcl过滤器,获取所有目录的Acl属性,再进入excludeAcl过滤器,以排除不需要的项。最后通过export-csv命令导出到csv文件。

Function Get-ChildItemToDepth {
	...
	# 单击链接查看函数定义
	函数定义
}

# 获取目录的Acl属性
Filter getDirAcl {
    $_ | where{$_.psiscontainer} | get-acl -ErrorAction SilentlyContinue | % {
        $path = $_.path
        $owner = $_.owner
        $_.access | % {
            New-Object PSObject -Property @{
                Path = $path.Replace("Microsoft.PowerShell.Core\FileSystem::","")
                Folder = $path.split("\\")[-1]
                Owner = $owner
                Access = $_.FileSystemRights
                Control = $_.AccessControlType
                User = $_.IdentityReference
                Inheritance = $_.IsInherited
            } # end New-Object
        } # end access pipe
    }
}

# 排除不必要的Acl项
Filter excludeAcl {
    $_  | ? {-not $_.Inheritance} `
        | ? {$_.User -notmatch "^BUILTIN"} `
        | ? {$_.User -notmatch "^S-"} `
        | ? {$_.User -notmatch "^CREATOR OWNER"} `
        | ? {$_.User -notmatch "^NT AUTHORITY"}
}

# 捕捉脚本运行过程中遇到的错误
trap  {
    write "Oops..."
    write $_
    continue
}

调用

$dir = "C:\"
Get-ChildItemToDepth $dir 3 `
	| getDirAcl | excludeAcl `
	| select Folder,Owner,User,Access,Path `
	| export-csv "D:\szh_3.csv" -force -encoding "utf8"

版权声明

本文出自 Lesca 技术宅,转载时请注明出处及相应链接。

本文永久链接: https://www.lesca.cn/archives/get-acl-info-of-non-inherit-directories-to-specified-depth.html

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!