631 字
3 分钟
使用PowerShell脚本,获取所有文件夹及其子文件夹的人员权限信息

有时候上级要求统计所有文件夹的权限。通常我们会选择文件夹右键→属性→安全,进入权限查看器,对每个成员的权限进行确认。

但是如果有10个文件夹,每个文件夹20个成员就要统计200次。

如果有100个文件夹,就要统计2000次。

人力有时而穷,不要用有限去对抗无限。

可以使用PowerShell脚本,获取指定路径下所有文件夹及其子文件夹的权限信息,并将结果导出到CSV文件中。

要打开PowerShell,请按下Windows键 + R打开运行窗口,然后输入”powershell”并按下Enter键。

首先,通过设置变量$publicDrivePath指定公共盘路径。

然后,使用Get-ChildItem命令获取指定路径下的所有文件夹及子文件夹的路径,-Recurse参数表示递归获取所有子文件夹。

接下来,创建一个空的权限信息数组$permissions。

使用foreach循环遍历每个文件夹路径,通过Get-Acl命令获取文件夹的安全描述符。

再次使用foreach循环遍历每个访问控制项,获取访问控制项的用户或组名,以及权限信息。

然后,创建一个权限信息对象,并将相关属性赋值。通过New-Object命令创建PSObject对象,-TypeName参数指定对象的类型,-Property参数指定对象的属性和值。

将权限信息对象添加到权限信息数组$permissions中。

最后,使用Export-Csv命令将权限信息数组导出到CSV文件。-Path参数指定导出的文件路径,-NoTypeInformation参数表示不包含类型信息,-Encoding参数指定文件编码为UTF-8。这步很重要,否则是乱码。

具体代码如下:

设置公共盘路径$publicDrivePath = “\10.100.200.01\AB\AB5000\ABC00\ABC40”#

获取所有文件夹及子文件夹路径folders=GetChildItemfolders = Get-ChildItempublicDrivePath -Recurse -Directory#

创建空的权限信息数组$permissions = @()#

循环遍历每个文件夹路径foreach (folderinfolderinfolders) {# 获取文件夹的安全描述符acl=GetAclacl = Get-Aclfolder.FullName#

循环遍历每个访问控制项foreach (aceinaceinacl.Access) {# 获取访问控制项的用户或组名identity=identity = ace.IdentityReference.Value#

获取访问控制项的权限permissionsString=permissionsString = ace.FileSystemRights.ToString()#

创建权限信息对象permission = New-Object -TypeName PSObject -Property @{ UserOrGroup = identity FolderPath = folder.FullNamePermissions=folder.FullName Permissions = permissionsString }#

添加权限信息对象到数组中permissions+=permissions += permission }}#

导出权限信息数组到CSV文件$permissions | Export-Csv -Path “D:\PublicDrivePermissions2.csv” -NoTypeInformation -Encoding UTF8#