如何在powershell中从字符串中检索多个值到数组中

时间:2012-09-13 13:00:19

标签: powershell

我希望找到一种方法将字符串中列出的所有MX记录检索到文本文件中 到目前为止,我有一个脚本,它给了我一个我用过的HTML输出:

$Records = Get-Content -Path "C:\NETESP\MXRecords\MXRecordsHTML.txt" | Select-String -SimpleMatch -Pattern "MX: "

这导致$ Records包含一个字符串:

<DIV class="well transcript">&nbsp;&nbsp;0&nbsp;&nbsp;nsb.nic.uk&nbsp;&nbsp;156.154.101.3&nbsp;&nbsp;NON-AUTH&nbsp;&nbsp;Recieved 2 Referrals , 
rcode=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NS: ns.mainnameserver.com,NS: ns2.mainnameserver.com,&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;1&nbsp;&nbsp;ns2.
mainnameserver.com&nbsp;&nbsp;79.170.43.3&nbsp;&nbsp;AUTH&nbsp;&nbsp;Recieved 2 Answers , rcode=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MX: exchange
=engine01-20052-1.icritical.com/pref=10,MX: exchange=engine02-20052-2.icritical.com/pref=20,&nbsp;&nbsp;<BR><BR></DIV></DIV></DIV></SPAN><TD>mx: </TD>

有没有办法将MX记录和首选项值放入文本文件中?根据运行的服务器,最多可能有6个MX记录。

1 个答案:

答案 0 :(得分:1)

像这样修改Select-String

... | Select-String 'MX:\s*([^,]+)' -AllMatches | 
      Foreach {$_.Matches | Foreach {$_.Value}}

您需要在正则表达式中创建捕获组([^,]+)。这将允许您只提取匹配文本的那部分。如果每行可以有多个MX记录,您还需要指定-AllMatches。之后,您将要枚举每个Matches并吐出我们的值(这将是捕获组文本)。

BTW此捕获组假定每个MX记录以逗号结尾。如果不是这种情况,您需要找到合适的正则表达式来捕获周围文本中的MX记录。