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

PowerShell计算一级子文件夹大小导出CSV为空问题求助

PowerShell 统计共享文件夹大小导出CSV错误修复

核心错误点

  • 你给$result赋值时额外加了花括号,实际是把未执行的脚本块存入了数组,没有拿到真实的计算结果
  • 原输出为字符串数组,Export-Csv要求输入为带明确属性的结构化对象,直接导出字符串数组无法生成正确CSV内容
  • 移除了-ErrorAction SilentlyContinue参数,遇到无权限路径、离线服务器时会中断执行或产生脏数据
  • 未对共享路径可用性做校验,离线服务器会产生无效结果

修复后完整代码

# 初始化结果数组
[System.Collections.ArrayList]$resultsArray = @()
# 配置共享名
$basePath = 'sql$'
# 读取服务器列表
$servers = Get-Content -Path "C:\tools\servers.txt"

foreach ($server in $servers) {
    $curPath = "\\$server\$basePath"
    Write-Host "正在处理路径:$curPath"
    # 先校验路径是否可访问
    if (-not (Test-Path -Path $curPath -ErrorAction SilentlyContinue)) {
        Write-Warning "路径 $curPath 无法访问,跳过该服务器"
        continue
    }
    # 遍历路径下一级子目录计算大小
    Get-ChildItem -Force $curPath -ErrorAction SilentlyContinue | Where-Object { $_ -is [System.IO.DirectoryInfo] } | ForEach-Object {
        $folderSize = 0
        # 递归计算当前目录总大小
        Get-ChildItem -Recurse -Force $_.FullName -ErrorAction SilentlyContinue | ForEach-Object { $folderSize += $_.Length }
        # 构造结构化对象,方便导出CSV
        $item = [PSCustomObject]@{
            服务器名称 = $server
            文件夹路径 = $_.FullName
            大小_GB    = '{0:N2}' -f ($folderSize / 1GB)
            大小_字节  = $folderSize
        }
        # 加入结果数组
        $resultsArray.Add($item) | Out-Null
    }
}

# 导出结果到CSV
$resultsArray | Export-Csv -Path .\result-share-size.csv -NoTypeInformation -Force -Encoding UTF8

# 输出结果
return $resultsArray

使用说明

  • 确保C:\tools\servers.txt中每行存储一个服务器名称,不要带多余的空格
  • 导出的CSV默认包含四列:服务器名称、文件夹完整路径、格式化后的GB大小、原始字节大小,可根据需求自行增删属性
  • 脚本已经自动跳过不可访问的服务器和无权限的路径,不会中断执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:45:05