使用Resolve-DnsName查询DNS时如何将报错信息单独导出到文件
解决方案
该需求可直接通过PowerShell自带的错误捕获机制实现,修改后的脚本如下:
$path = ".\domain.txt" $dnsserver = @('DNS-Srv1', 'DNS-Srv2' , 'DNS-Srv3') $errorLogPath = ".\dns_query_errors.log" # 清空历史错误日志,不需要可删除该行 Clear-Content -Path $errorLogPath -ErrorAction SilentlyContinue $mxdomain = Get-Content $path foreach ($domain in $mxdomain) { Resolve-DnsName -Name $domain -Type MX -Server $dnsserver -ErrorAction SilentlyContinue -ErrorVariable dnsErr | Select-Object Name,Type,NameExchange # 存在报错时按指定格式写入日志 if ($dnsErr) { $errorOutput = @" + CategoryInfo : $($dnsErr.CategoryInfo) + FullyQualifiedErrorId : $($dnsErr.FullyQualifiedErrorId) $dnsErr "@ Add-Content -Path $errorLogPath -Value $errorOutput -Encoding UTF8 } }
脚本运行后,正常的MX记录查询结果会保持原有输出逻辑,所有查询失败的报错信息会按你要求的格式单独写入dns_query_errors.log文件。如果需要批量导出正常查询结果,可在Select-Object Name,Type,NameExchange后追加| Export-Csv -Path ".\mx_records.csv" -NoTypeInformation -Encoding UTF8即可。
内容的提问来源于stack exchange,提问作者Marko
相关产品推荐
相关产品推荐

