需求:编写PowerShell脚本批量查询服务器文件夹树大小并导出CSV
批量查询服务器文件夹总大小的PowerShell脚本
以下是完全适配需求的实用脚本,新手也能轻松修改使用:
# -------------------------- 配置区:按需修改以下参数 -------------------------- $serverListPath = "C:\temp\servers.txt" # 服务器列表文件路径(支持TXT/CSV) $targetFolderPath = "D:\Data" # 要查询的目标文件夹路径(本地路径格式,脚本自动转为UNC) $outputCsvPath = "C:\temp\FolderSizeReport.csv" # 最终报告导出路径 # ----------------------------------------------------------------------------- # 初始化结果数组 $results = @() # 导入服务器列表 if ($serverListPath -like "*.csv") { # CSV文件:默认列名为ServerName,若你的列名不同请修改这里 $servers = Import-Csv -Path $serverListPath | Select-Object -ExpandProperty ServerName } else { # TXT文件:每行一个服务器名 $servers = Get-Content -Path $serverListPath } # 循环处理每台服务器 foreach ($server in $servers) { # 把本地路径转为UNC格式(比如D:\Data → \\ServerName\D$\Data) $uncPath = "\\$server\$($targetFolderPath.Replace(':', '$'))" # 构建当前服务器的结果对象 $result = [PSCustomObject]@{ ServerName = $server FolderSize_GB = $null Status = "Success" } try { # 递归计算文件夹总大小 $totalSizeBytes = Get-ChildItem -Path $uncPath -Recurse -Force -ErrorAction Stop | Measure-Object -Property Length -Sum | Select-Object -ExpandProperty Sum # 转换为GB并保留2位小数 $result.FolderSize_GB = [math]::Round($totalSizeBytes / 1GB, 2) } catch { # 捕获并记录错误信息 $result.Status = "Failed: $($_.Exception.Message)" } $results += $result # 实时输出处理进度 Write-Host "Processed: $server - $($result.Status)" } # 导出结果到CSV $results | Export-Csv -Path $outputCsvPath -NoTypeInformation -Encoding UTF8 Write-Host "Report saved to: $outputCsvPath"
使用步骤
修改配置参数:
$serverListPath:替换为你的服务器列表路径,TXT文件每行写一个服务器名;CSV文件需包含ServerName列(列名不同请对应修改脚本里的字段)$targetFolderPath:填写要查询的文件夹本地路径,脚本会自动转为跨服务器可访问的UNC格式$outputCsvPath:设置最终报告的保存位置
运行脚本:
- 以管理员权限打开PowerShell,直接运行脚本即可
- 脚本会实时显示每台服务器的处理状态,失败的服务器会在报告中标记具体错误原因
关键细节
- 自动适配UNC路径:解决跨服务器访问文件夹的问题
- 错误捕获:覆盖服务器不可达、路径不存在、权限不足等常见异常
- 格式友好:将字节大小转为GB并保留2位小数,报告可读性更强
- 编码兼容:导出CSV使用UTF8编码,避免中文乱码
内容的提问来源于stack exchange,提问作者FriendlyPim
相关产品推荐
相关产品推荐

