You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用PowerShell提取指定格式的DNS记录内容?

用PowerShell提取DNS记录的指定内容

我来帮你搞定这个需求!要从IN NS google-public-dns-a.google.com. ; in the domain这种格式的DNS记录里提取出NS google-public-dns-a.google.com.,有两种简单好用的PowerShell方法,我给你详细拆解:

方法一:正则表达式替换(最简洁高效)

正则可以精准匹配并提取我们需要的部分,同时自动忽略开头的IN和末尾的注释。直接用-replace操作符就能搞定:

# 单条记录测试
$dnsLine = "IN NS google-public-dns-a.google.com. ; in the domain"
$dnsLine -replace '^\s*IN\s+(\w+)\s+(\S+)\s*;.*$', '$1 $2'

正则说明

  • ^\s*IN\s+:匹配开头的空白(如果有的话)+ IN + 任意数量空格
  • (\w+):捕获记录类型(NS/SOA/A/MX这些单词)
  • \s+(\S+):匹配空格后,捕获主机名(连续非空白字符,比如google-public-dns-a.google.com.
  • \s*;.*$:匹配注释部分(分号及后面所有内容)
  • 替换成$1 $2就是把捕获的记录类型和主机名拼接起来

如果是批量处理文件里的DNS记录,直接管道传递即可:

Get-Content "你的DNS记录文件.txt" | ForEach-Object {
    $_ -replace '^\s*IN\s+(\w+)\s+(\S+)\s*;.*$', '$1 $2'
}

方法二:字符串拆分筛选(更直观,适合新手理解)

如果觉得正则有点抽象,也可以用拆分字符串的方式分步处理:

$dnsLine = "IN NS google-public-dns-a.google.com. ; in the domain"

# 第一步:拆分注释,只保留分号前的内容
$cleanContent = $dnsLine -split ';', 2 | Select-Object -First 1

# 第二步:按空白字符拆分,过滤掉空字符串
$parts = $cleanContent -split '\s+' | Where-Object { $_ }

# 第三步:判断记录类型是否在目标列表里,然后拼接结果
if ($parts[1] -in ('NS','SOA','A','MX')) {
    "$($parts[1]) $($parts[2])"
}

为什么你的现有代码不行?
你原来的代码只捕获了记录类型,没处理后面的主机名,也没去掉开头的IN和末尾的注释,所以没法得到完整的目标结果。上面两种方法都解决了这些问题~

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

火山引擎 最新活动