PowerShell导出部门Public文件夹权限时Get-Acl参数报错求助
解决PowerShell导出文件夹权限时的Get-Acl参数为空错误
问题根源
这个错误的核心是两个容易忽略的小问题:
- 错误处理路径对象:
你用dir拿到的$Folder是DirectoryInfo对象,但Join-Path接收这个对象时,会自动把它转换成字符串格式的完整路径——也就是说$Folder2只是个普通字符串,根本没有FullName属性。你调用$Folder2.FullName得到的是$null,自然会让Get-Acl因为空参数报错。 - 未校验目标目录存在性:
就算路径拼接没问题,如果某个子文件夹下压根没有Public目录,直接跑Get-Acl也会触发错误,因为它找不到要访问的路径。
修复后的脚本
我调整了脚本,解决了这两个问题,还加了点实用的优化:
$FolderPath = Get-ChildItem -Directory -Path "D:\Data\Department" -Force $Report = @() Foreach ($Folder in $FolderPath) { # 明确用Folder的FullName拼接路径,避免隐式转换的歧义 $Folder2 = Join-Path -Path $Folder.FullName -ChildPath "Public" # 先检查Public目录是否存在,不存在就跳过并提示 if (Test-Path -Path $Folder2 -PathType Container) { $Acl = Get-Acl $Folder2 foreach ($Access in $acl.Access) { $Properties = [ordered]@{ 'FolderName' = $Folder2 'AD Group or User' = $Access.IdentityReference 'Permissions' = $Access.FileSystemRights 'Inherited' = $Access.IsInherited } $Report += New-Object -TypeName PSObject -Property $Properties } } else { Write-Warning "跳过不存在的Public目录: $Folder2" } } # 导出CSV时去掉类型信息,让文件更整洁 $Report | Export-Csv -Path "C:\Users\adminrw\FolderPermissions.csv" -NoTypeInformation
优化点说明
- 把
dir换成了Get-ChildItem,这是PowerShell的标准命令名,可读性更好(两者功能完全一致)。 - 明确用
$Folder.FullName来拼接路径,避免隐式转换带来的混淆。 - 增加
Test-Path检查,自动跳过没有Public目录的文件夹,还会用警告提示你哪些文件夹不符合预期结构。 - 导出CSV时加了
-NoTypeInformation,避免文件开头多出一行无用的类型定义。
内容的提问来源于stack exchange,提问作者Ralf W
相关产品推荐
相关产品推荐

