You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell导出部门Public文件夹权限时Get-Acl参数报错求助

解决PowerShell导出文件夹权限时的Get-Acl参数为空错误

问题根源

这个错误的核心是两个容易忽略的小问题:

  1. 错误处理路径对象:
    你用dir拿到的$Folder是DirectoryInfo对象,但Join-Path接收这个对象时,会自动把它转换成字符串格式的完整路径——也就是说$Folder2只是个普通字符串,根本没有FullName属性。你调用$Folder2.FullName得到的是$null,自然会让Get-Acl因为空参数报错。
  2. 未校验目标目录存在性:
    就算路径拼接没问题,如果某个子文件夹下压根没有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:49:12