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

修复PowerShell脚本:提取多网页URL并去重保存至TXT文件

修复PowerShell域名提取脚本问题

需求说明

从指定的两个威胁Feed链接中提取域名,去除http://、https://、127.0.0.1这类前缀,去重后保存到单个TXT文件。

原脚本的问题

原脚本存在以下关键问题导致无法得到预期结果:

  • 循环变量为$url,但下载数据时错误使用了未定义的$threatFeedUrl变量,导致每次循环都无法正确下载Feed内容。
  • 正则表达式仅匹配127.0.0.1开头的域名,未处理http/https开头的域名,覆盖范围不符合需求。
  • 每次循环都用Out-File直接覆盖输出文件,最终只会保留最后一个Feed的结果,没有累加所有来源的内容。
  • 缺少去重逻辑,无法保证结果中没有重复域名。
  • 初始化了$allUrls数组但未实际使用,属于冗余代码。

修复后的脚本

$threatFeedUrls = @(
    "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/Alternate%20versions%20Anti-Malware%20List/AntiMalwareHosts.txt",
    "https://osint.digitalside.it/Threat-Intel/lists/latestdomains.txt"
)

# 初始化数组存储所有提取的域名
$allDomains = @()

foreach ($url in $threatFeedUrls) {
    try {
        # 下载Feed数据,用Invoke-WebRequest更适合文本内容,避免自动解析问题
        $threatFeedData = Invoke-WebRequest -Uri $url -UseBasicParsing | Select-Object -ExpandProperty Content
        
        # 正则匹配:覆盖127.0.0.1前缀、http/https开头域名、纯域名格式
        $pattern = '(?:127\.0\.0\.1\s+|https?://)([a-zA-Z0-9.-]+)|^([a-zA-Z0-9.-]+)$'
        
        $matches = [regex]::Matches($threatFeedData, $pattern, [System.Text.RegularExpressions.RegexOptions]::Multiline)
        
        # 提取匹配到的域名,过滤空值和注释行
        $extractedDomains = foreach ($match in $matches) {
            $domain = $match.Groups[1].Value
            if ([string]::IsNullOrEmpty($domain)) {
                $domain = $match.Groups[2].Value
            }
            if (-not [string]::IsNullOrEmpty($domain) -and $domain -notmatch '^#') {
                $domain
            }
        }
        
        # 将当前Feed提取的域名添加到总数组
        $allDomains += $extractedDomains
        Write-Host "成功处理Feed: $url"
    }
    catch {
        Write-Host "处理Feed失败: $url,错误信息: $_"
    }
}

# 去重并保存到文件
$outputFilePath = 'output250.txt'
$allDomains | Select-Object -Unique | Out-File -FilePath $outputFilePath -Encoding utf8

Write-Host "所有域名已提取、去重并保存到: $outputFilePath"

修复点说明

  1. 修正变量名错误:循环中使用正确的$url变量下载Feed内容,避免无效请求。
  2. 扩展正则匹配规则:覆盖127.0.0.1前缀、http/https开头的域名,以及纯域名格式的内容,确保所有来源的域名都能被提取。
  3. 累加所有域名:将每个Feed提取的域名添加到总数组,避免覆盖之前的结果。
  4. 添加去重逻辑:使用Select-Object -Unique对所有域名去重。
  5. 增加错误处理:用try/catch捕获下载失败的情况,输出错误信息便于排查。
  6. 优化文本获取:改用Invoke-WebRequest获取文本内容,避免Invoke-RestMethod对某些文本格式的自动解析问题。
  7. 过滤无效内容:排除注释行和空值,确保结果纯净。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:45:03