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

PowerShell调用Get-ChildItem扫描共享盘返回无目录名文件记录问题

PowerShell扫描共享盘缺失DirectoryName属性问题修复方案

问题根因

  • 路径匹配逻辑错误:$sourcepath*的写法会匹配所有名称前缀和$sourcepath完全一致的目录,而非仅扫描$sourcepath下的内容。如果$sourcepath末尾未携带反斜杠,匹配范围会完全超出预期,返回的文件自然不在目标共享盘目录下,你也无法检索到。
  • 权限不足:Get-ChildItem默认会静默跳过无权限访问的文件/目录,这类对象返回时会缺失DirectoryName等核心属性,且你手动检索时因为权限不足也无法找到对应文件。
  • 隐藏/系统文件未展示:你手动检索时如果未开启「显示隐藏文件、受保护的操作系统文件」的选项,也会看不到扫描到的隐藏属性文件。
  • 未过滤目录对象:原脚本没有加-File参数,会把目录对象也返回,目录对象的属性结构和文件不同,也可能出现属性缺失的情况。

修复后的代码

# 确保源路径末尾携带反斜杠,避免路径匹配错误
if (-not $sourcepath.EndsWith('\')) {
    $sourcepath += '\'
}

$properties = @(
    @{ Name = 'File Size (MB)'
        Expression = {[math]::Round(($_.Length / 1MB),2)}
    }
    'DirectoryName'
    'Name'
    'FullName' # 新增完整路径字段,直接定位文件位置
    'CreationTime'
    'LastWriteTime'
    @{ Name = 'Age'
        Expression = {[math]::Round(([datetime]::Now - $_.LastWriteTime).TotalDays /365,2)}
    }
)
# 修正Get-ChildItem参数,加-File只扫文件,加错误变量记录无权限路径
$target_files = Get-ChildItem -Path $sourcepath -Recurse -File -ErrorAction SilentlyContinue -ErrorVariable scanErrors | Select-Object $properties | 
Export-Csv $destinationpath\${destinationfilename}.csv -NoTypeInformation

# 可选:导出扫描错误日志,查看无权限的路径
$scanErrors | Export-Csv $destinationpath\scan_errors.csv -NoTypeInformation

验证方法

导出结果后查看FullName字段即可直接获取文件的完整路径,复制路径直接到资源管理器地址栏访问即可定位文件,如果访问报错说明是权限不足导致的属性缺失。

内容的提问来源于stack exchange,提问作者Matthew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:36:01