PowerShell脚本无法合并多服务器CSV文件问题求助
问题分析与修复方案
原脚本的核心问题
- 服务器列表未生效:
$servers的赋值代码被注释掉了,根本没从指定OU里获取服务器列表,循环等于空跑或只处理本地机器。 - 远程路径错误:
$sourcefolder只写了C$\folder\,没有拼接目标服务器名,实际访问的是本地机器的共享目录,所以每次都读取同一个本地文件,导致重复显示同一台服务器的信息。 - 结果数组被重复清空:
$result = @()放在服务器循环内部,每遍历一台服务器就清空一次数组,最后只能保留最后一次循环的数据(如果路径正确的话)。
修正后的脚本
Import-Module ActiveDirectory # 从目标OU获取所有服务器名称,替换为你实际的OU路径 $servers = (Get-ADComputer -SearchBase "OU=Servers,DC=yourdomain,DC=com" -Filter *).Name # 初始化结果数组,放在循环外部避免被重复清空 $result = @() foreach ($server in $servers) { # 拼接目标服务器的远程共享文件路径 $sourceFile = "\\$server\C$\folder\serverinfo.csv" # 先检查文件是否可访问,避免报错中断脚本 if (Test-Path -Path $sourceFile) { Write-Host "正在读取服务器 $server 的数据..." # 直接导入远程CSV并追加到结果数组 $data = Import-Csv -Path $sourceFile $result += $data } else { Write-Warning "服务器 $server 上未找到文件:$sourceFile" } } # 导出合并后的CSV文件 $exportPath = "\\mycomputer\C$\folder\merged.csv" $result | Export-Csv -Path $exportPath -NoTypeInformation Write-Host "合并完成,文件已保存至:$exportPath" # 输出合并结果预览 $result
关键改进说明
- 启用
$servers变量,正确从AD OU拉取服务器列表,记得替换成你实际的OU完整路径。 - 拼接完整的远程共享路径
\\$server\C$\folder\serverinfo.csv,确保访问的是目标服务器的指定文件。 - 将结果数组初始化移到服务器循环外部,保证所有服务器的数据能持续累加。
- 添加
Test-Path检查文件可用性,避免因服务器离线、权限不足或文件缺失导致脚本报错中断。 - 增加执行状态提示,方便跟踪脚本运行进度。
内容的提问来源于stack exchange,提问作者BobSnarley
相关产品推荐
相关产品推荐

