如何让PowerShell脚本检测IP连通状态时同步显示对应主机名
解决方案
我们可以通过DNS反向解析功能获取IP对应的主机名,同时对解析失败的场景做异常捕获避免脚本中断,修改后的完整代码如下:
# 读取IP列表文件 $names = Get-Content "C:\Users\jason.darby\Desktop\useful scripts\ip.txt" # 初始化输出结果变量,避免历史值干扰 $Output = "" foreach ($name in $names) { # 反向解析IP对应的主机名,解析失败显示兜底提示 $hostName = try { [System.Net.Dns]::GetHostEntry($name).HostName } catch { "*无有效PTR记录*" } # 连通性检测逻辑 if (Test-Connection -ComputerName $name -Count 1 -ErrorAction SilentlyContinue) { $result = "$name ($hostName) is UP" Write-Host $result -ForegroundColor Green $Output += $result + "`n" } else { $result = "$name ($hostName) is DOWN" Write-Host $result -ForegroundColor Red $Output += $result + "`n" } } Start-Sleep -s 10
改动说明
- 新增DNS反向解析逻辑,自动查询IP对应的主机名,无对应解析记录时显示无有效PTR记录的兜底提示
- 输出内容同步展示IP、主机名、连通状态三个信息,满足需求
- 保留了原脚本的彩色控制台输出、结果拼接、结束前等待10秒的原有逻辑
- 新增解析异常捕获逻辑,避免部分IP解析失败导致脚本运行中断
可选拓展
如果需要把检测结果持久化存储,可在脚本末尾添加如下代码,将结果导出为本地文本文件:
$Output | Out-File "C:\Users\jason.darby\Desktop\ip检测结果.txt" -Encoding UTF8
内容的提问来源于stack exchange,提问作者Drone43
相关产品推荐
相关产品推荐

