PowerShell实现多Windows设备自定义表头CSV生成与主机存活检测
解决Windows客户端/服务器PowerShell CSV采集与存活检测问题
一、客户端CSV追加脚本(修复字符间NULL与无法追加问题)
之前脚本出现的字符间NULL、无法追加主机条目问题,主要是编码不匹配或手动拼接CSV格式导致的,以下是修复后的脚本:
# 替换为实际的共享文件夹CSV路径,比如\\FileServer\HostMonitor\Hosts.csv $csvPath = "\\YourServer\SharedFolder\Hosts.csv" # 获取本机主机名 $hostname = $env:COMPUTERNAME # 获取第一个非环回的IPv4地址(优先DHCP分配,再取静态地址) $ipAddress = (Get-NetIPAddress -AddressFamily IPv4 -PrefixOrigin Dhcp | Select-Object -First 1).IPAddress if (-not $ipAddress) { $ipAddress = (Get-NetIPAddress -AddressFamily IPv4 -PrefixOrigin Manual | Select-Object -First 1).IPAddress } # 构造要写入的主机信息对象 $hostRecord = [PSCustomObject]@{ "Hostnames" = $hostname "IP Address" = $ipAddress } # 检查CSV是否存在:不存在则创建带表头的文件,存在则追加条目 if (-not (Test-Path -Path $csvPath)) { $hostRecord | Export-Csv -Path $csvPath -Encoding UTF8 -NoTypeInformation } else { $hostRecord | Export-Csv -Path $csvPath -Encoding UTF8 -Append -NoTypeInformation }
关键修复说明
- 用
Export-Csv的-Append参数安全追加条目,避免手动拼接文本导致的格式混乱 - 指定
-Encoding UTF8,彻底解决Unicode编码带来的字符间NULL问题 - 逻辑上优先获取DHCP分配的IP,确保拿到的是实际对外的有效地址
任务计划配置提示
- 创建每日定时任务,触发器设为你需要的执行时间
- 操作选择“启动程序”,程序/脚本填
powershell.exe,参数填-ExecutionPolicy Bypass -File "C:\Scripts\Client_Upload_HostInfo.ps1"(替换为你的脚本实际路径) - 确保任务运行的账号拥有共享文件夹的写入权限
二、服务器存活检测脚本(每15分钟执行)
以下脚本实现读取共享CSV、Ping检测主机状态并添加IsAlive列的功能:
# 共享CSV路径 $csvPath = "\\YourServer\SharedFolder\Hosts.csv" # 可以选择覆盖原文件,或者导出到新文件,这里示例导出到新文件 $outputCsvPath = "\\YourServer\SharedFolder\Hosts_With_Status.csv" # 读取CSV文件内容 $hostList = Import-Csv -Path $csvPath # 遍历每个主机条目,执行Ping检测 foreach ($host in $hostList) { # 快速Ping检测:发送1个包,超时1秒,返回布尔值 $pingSuccess = Test-Connection -ComputerName $host."IP Address" -Count 1 -TimeoutSeconds 1 -Quiet # 添加IsAlive列,设置对应状态文本 $host | Add-Member -MemberType NoteProperty -Name "IsAlive" -Value $(if ($pingSuccess) { "该计算机在线" } else { "该计算机离线" }) } # 导出包含状态的CSV文件 $hostList | Export-Csv -Path $outputCsvPath -Encoding UTF8 -NoTypeInformation
关键功能说明
- 使用
Test-Connection的-Quiet参数直接返回检测结果,简化状态判断 - 配置
-TimeoutSeconds 1和-Count 1,加快批量主机的检测速度 - 用
Add-Member动态添加IsAlive列,保证CSV结构与原文件兼容
任务计划配置提示
- 创建定时任务,触发器设为“重复任务间隔15分钟”,持续时间设为“无限期”
- 操作参数同客户端脚本,确保运行账号拥有共享文件夹的读写权限
内容的提问来源于stack exchange,提问作者melihcinar
相关产品推荐
相关产品推荐

