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
相关产品推荐
相关产品推荐

