You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改PowerShell脚本以支持主机名/IP地址的主机连通性检查

修改后的PowerShell脚本(支持主机名/IP地址检查)

没问题,我帮你调整这个脚本,让它同时兼容主机名和IP地址的连通性检查。原脚本里的[System.Net.Dns]::GetHostByAddress()只能处理IP地址,遇到主机名就会抛出异常,所以我们先通过IP地址验证来区分输入类型,再选择对应的DNS查询逻辑。

以下是完整的修改后脚本:

$ComputersFile = "HostName.txt"
$OutputFile = "Output.txt"
$Computers = Get-Content $ComputersFile

# 清空或创建输出文件
if (Test-Path $OutputFile) { Remove-Item $OutputFile }

foreach ($Computer in $Computers) {
    $Computer = $Computer.Trim() # 去除首尾空格,避免空行干扰
    if ([string]::IsNullOrEmpty($Computer)) { continue } # 跳过空行

    $dnsInfo = $null
    $isIP = $false
    $ipAddress = $null

    # 先判断是否是有效的IP地址(兼容IPv4/IPv6)
    if ([System.Net.IPAddress]::TryParse($Computer, [ref]$ipAddress)) {
        $isIP = $true
        try {
            # IP地址反向解析主机名
            $dnsInfo = [System.Net.Dns]::GetHostByAddress($ipAddress)
        }
        catch {
            $dnsInfo = "反向解析失败"
        }
    }
    else {
        # 主机名正向解析IP地址
        try {
            $dnsInfo = [System.Net.Dns]::GetHostEntry($Computer)
        }
        catch {
            $dnsInfo = "正向解析失败"
        }
    }

    # 测试连通性
    $isReachable = Test-Connection $Computer -Count 1 -ErrorAction SilentlyContinue

    # 构造输出行,保持你原来的分隔符格式
    if ($isReachable) {
        if ($isIP) {
            $outputLine = "$Computer^Yes^$($dnsInfo.HostName)"
        }
        else {
            # 优先取IPv4地址(如果需要IPv6可调整筛选条件)
            $resolvedIP = $dnsInfo.AddressList | Where-Object { $_.AddressFamily -eq 'InterNetwork' } | Select-Object -First 1
            $outputLine = "$Computer^Yes^$($resolvedIP.IPAddressToString)"
        }
    }
    else {
        $outputLine = "$Computer^No^$dnsInfo"
    }

    # 写入输出文件
    Add-Content $OutputFile $outputLine
}

Write-Host "检查完成,结果已保存到 $OutputFile"

关键修改点说明:

  • IP地址验证:用[System.Net.IPAddress]::TryParse()来判断输入是否是有效的IP地址,比正则表达式更可靠,还能自动兼容IPv6
  • DNS解析逻辑分支:
    • 如果是IP地址,尝试反向解析获取主机名
    • 如果是主机名,尝试正向解析获取IP地址
  • 容错处理:添加了DNS解析失败的捕获,避免脚本中断,同时在输出里标注解析失败的情况
  • 空行处理:添加了去除空格和跳过空行的逻辑,避免处理无效的输入行
  • 输出格式兼容:保持了你原来的^分隔符格式,方便后续导出或分析

内容的提问来源于stack exchange,提问作者Hassan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:36:02