求助优化PowerShell网站检测脚本:显示DNS记录与重定向并添加间隔行
PowerShell网站自动化检测脚本修正方案
问题说明
需要编写PowerShell脚本实现以下功能:
- 检测目标网站的CNAME记录、A记录、AAAA记录
- 获取网站的重定向域名
- 每检测3个网站后添加一行空行
原脚本无法正常显示所有CNAME记录,需修正。
原脚本存在的核心问题
- CNAME记录字段错误:原脚本用
PrimaryServer存储CNAME记录,但PrimaryServer是NS记录的属性,CNAME记录应取NameHost属性 - 无CNAME记录时处理不当:当域名没有CNAME记录,
Resolve-DnsName -Type CNAME会抛出错误,进入catch块后相关变量未定义,导致字段为空 - 重定向请求逻辑缺陷:直接用域名发起请求,未指定http/https协议,可能导致请求失败
- 未实现每3条结果空行的要求
- 数组拼接效率低:用
$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
脚本改进说明
- 修正CNAME记录获取:改用
NameHost属性存储CNAME记录,无记录时显示明确提示文本 - 完善重定向检测:自动尝试https和http协议,兼容不同网站的协议配置,准确捕获3xx状态码的重定向
- 实现每3条空行逻辑:通过遍历索引判断,每3条记录后添加空对象作为分隔
- 优化性能:使用
ArrayList替代数组拼接,避免频繁扩容的性能损耗 - 细化错误处理:对DNS解析和网页请求分别做错误捕获,确保每个字段都有合理的默认值
内容的提问来源于stack exchange,提问作者SHANKSSSSSS
相关产品推荐
相关产品推荐

