如何为现有Ping脚本添加NSLookup功能以输出IP地址
为Ping脚本添加NSLookup功能
我有一个可正常运行的Ping脚本,希望为其添加NSLookup功能:已知打印机主机名时,若能查询到对应IP地址,就将该IP输出至单独列中。以下是我尝试的两段代码:
第一段示例代码
Get-Content "C:\Users\Username\Desktop\New folder\hnames.txt" | ForEach-Object { # 替换为你的用户名及主机名文件路径 if(Test-Connection $_ -Count 1 -ErrorAction SilentlyContinue){ $status = 'Alive' } else { $status = 'Dead' } $dns = Resolve-DnsName $_ -DnsOnly -ErrorAction SilentlyContinue # 输出包含两个独立属性的对象 [pscustomobject]@{ Status = $status Target = $_ IPAddress = $dns.IPAddress -join ', ' } } | Export-Csv 'C:\Users\Username\Desktop\New folder\output.csv' -NoTypeInformation # 替换为你的输出文件路径及文件名
第二段示例代码
Get-Content "C:\Users\Username\Desktop\New folder\hnames.txt" | ForEach-Object { # 替换为你的用户名及主机名文件路径 if(Test-Connection $_ -Count 1 -ErrorAction SilentlyContinue){ $status = 'Alive' } else { $status = 'Dead' } # 输出包含两个独立属性的对象 [pscustomobject]@{ Status = $status Target = $_ IPAddress = $success.Address.IPAddressToString } } | Export-Csv 'C:\Users\Username\Desktop\New folder\output.csv' -NoTypeInformation # 替换为你的输出文件路径及文件名
代码问题分析与优化方案
- 第一段代码逻辑可行,但DNS解析失败时
IPAddress列会显示为空,可添加友好提示;同时代码结构可进一步规整。 - 第二段代码存在明显错误:变量
$success未定义,会导致IPAddress列始终为空或触发报错,属于无效写法。
优化后的完整代码
Get-Content "C:\Users\Username\Desktop\New folder\hnames.txt" | ForEach-Object { $hostname = $_ # 检测主机连通状态 $status = Test-Connection $hostname -Count 1 -ErrorAction SilentlyContinue ? 'Alive' : 'Dead' # 解析DNS获取IP地址 $dnsResult = Resolve-DnsName $hostname -DnsOnly -ErrorAction SilentlyContinue $ipAddress = $dnsResult.IPAddress ? ($dnsResult.IPAddress -join ', ') : '未解析到IP' # 输出结果对象 [pscustomobject]@{ Status = $status Target = $hostname IPAddress = $ipAddress } } | Export-Csv 'C:\Users\Username\Desktop\New folder\output.csv' -NoTypeInformation
优化点说明:
- 用变量存储当前主机名,提升代码可读性
- 简化状态赋值与IP解析判断逻辑,让代码更简洁
- 增加DNS解析失败时的友好提示文本
- 规整代码结构,便于后续维护
内容的提问来源于stack exchange,提问作者EEVolutionX
相关产品推荐
相关产品推荐

