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

求助优化PowerShell网站检测脚本:显示DNS记录与重定向并添加间隔行

PowerShell网站自动化检测脚本修正方案

问题说明

需要编写PowerShell脚本实现以下功能:

  • 检测目标网站的CNAME记录、A记录、AAAA记录
  • 获取网站的重定向域名
  • 每检测3个网站后添加一行空行
    原脚本无法正常显示所有CNAME记录,需修正。

原脚本存在的核心问题

  1. CNAME记录字段错误:原脚本用PrimaryServer存储CNAME记录,但PrimaryServer是NS记录的属性,CNAME记录应取NameHost属性
  2. 无CNAME记录时处理不当:当域名没有CNAME记录,Resolve-DnsName -Type CNAME会抛出错误,进入catch块后相关变量未定义,导致字段为空
  3. 重定向请求逻辑缺陷:直接用域名发起请求,未指定http/https协议,可能导致请求失败
  4. 未实现每3条结果空行的要求
  5. 数组拼接效率低:用$FinalResult += $tempObj频繁扩容数组,性能较差

修正后的脚本

$NameList = @("w88live.com", "www.w88live.com", "m.w88live.com", "w88io.com", "www.w88io.com", "m.w88io.com")
# 使用ArrayList提升批量处理性能
$FinalResult = New-Object System.Collections.ArrayList

foreach ($index in 0..($NameList.Count - 1)) {
    $Name = $NameList[$index]
    $tempObj = [PSCustomObject]@{
        Name          = $Name
        CNAME         = $null
        IPAddresses   = $null
        Redirection   = $null
    }

    # 获取CNAME记录
    try {
        $cnameRecords = Resolve-DnsName -Name $Name -Type CNAME -ErrorAction Stop
        $tempObj.CNAME = ($cnameRecords.NameHost -join " / ")
    }
    catch {
        $tempObj.CNAME = "无CNAME记录"
    }

    # 获取A/AAAA记录
    try {
        $ipRecords = Resolve-DnsName -Name $Name -Type A_AAAA -ErrorAction Stop
        $tempObj.IPAddresses = ($ipRecords.IPAddress -join " / ")
    }
    catch {
        $tempObj.IPAddresses = "无A/AAAA记录"
    }

    # 获取重定向信息(自动尝试https/http协议)
    $redirectUrl = $null
    foreach ($protocol in @("https://", "http://")) {
        try {
            $response = Invoke-WebRequest -Uri "$protocol$Name" -DisableKeepAlive -MaximumRedirection 0 -TimeoutSec 5 -ErrorAction Stop -Method Head
            if ($response.StatusCode -in 301, 302, 307, 308) {
                $redirectUrl = $response.Headers.Location
                break
            }
        }
        catch [System.Net.WebException] {
            $response = $_.Exception.Response
            if ($response -and $response.StatusCode -in 301, 302, 307, 308) {
                $redirectUrl = $response.Headers["Location"]
                break
            }
        }
        catch {
            # 其他错误跳过,尝试下一个协议
            continue
        }
    }
    $tempObj.Redirection = $redirectUrl ?? "无重定向"

    # 添加到结果集
    [void]$FinalResult.Add($tempObj)

    # 每3个网站后添加空行(最后一个网站不添加)
    if (($index + 1) % 3 -eq 0 -and ($index + 1) -ne $NameList.Count) {
        [void]$FinalResult.Add([PSCustomObject]@{
            Name          = ""
            CNAME         = ""
            IPAddresses   = ""
            Redirection   = ""
        })
    }
}

# 格式化输出结果
$FinalResult | Format-Table -AutoSize

脚本改进说明

  1. 修正CNAME记录获取:改用NameHost属性存储CNAME记录,无记录时显示明确提示文本
  2. 完善重定向检测:自动尝试https和http协议,兼容不同网站的协议配置,准确捕获3xx状态码的重定向
  3. 实现每3条空行逻辑:通过遍历索引判断,每3条记录后添加空对象作为分隔
  4. 优化性能:使用ArrayList替代数组拼接,避免频繁扩容的性能损耗
  5. 细化错误处理:对DNS解析和网页请求分别做错误捕获,确保每个字段都有合理的默认值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:50:45