我想检查我的联系人pipe理系统中的电子邮件地址是否有效,我认为可以这样做的最佳方式是获取其域名的MXlogging,然后打开SMTP连接并查看远程服务器是否接受电子邮件地址作为有效的“TO”。
看看Powershell Dig Cmdlet 。
使用这个你可以做到这一点:
PS> $allRecords = Get-Dns -Name mydomain.com -Type MX PS> write-host $allRecords.RecordsMX
$allRecords是$allRecordstypes,所以你可以读取它的属性来获取你的logging。
关于此cmdlet的其他更好的事情是,您可以让它在单个查询中返回多种types的logging。
function Get-DnsAddressList { param( [parameter(Mandatory=$true)][Alias("Host")] [string]$HostName) try { return [System.Net.Dns]::GetHostEntry($HostName).AddressList } catch [System.Net.Sockets.SocketException] { if ($_.Exception.ErrorCode -ne 11001) { throw $_ } return = @() } } function Get-DnsMXQuery { param( [parameter(Mandatory=$true)] [string]$DomainName) if (-not $Script:global_dnsquery) { $Private:SourceCS = @' using System; using System.Collections.Generic; using System.ComponentModel; using System.Runtime.InteropServices; namespace PM.Dns { public class MXQuery { [DllImport("dnsapi", EntryPoint="DnsQuery_W", CharSet=CharSet.Unicode, SetLastError=true, ExactSpelling=true)] private static extern int DnsQuery( [MarshalAs(UnmanagedType.VBByRefStr)] ref string pszName, ushort wType, uint options, IntPtr aipServers, ref IntPtr ppQueryResults, IntPtr pReserved); [DllImport("dnsapi", CharSet=CharSet.Auto, SetLastError=true)] private static extern void DnsRecordListFree(IntPtr pRecordList, int FreeType); public static string[] Resolve(string domain) { if (Environment.OSVersion.Platform != PlatformID.Win32NT) throw new NotSupportedException(); List<string> list = new List<string>(); IntPtr ptr1 = IntPtr.Zero; IntPtr ptr2 = IntPtr.Zero; int num1 = DnsQuery(ref domain, 15, 0, IntPtr.Zero, ref ptr1, IntPtr.Zero); if (num1 != 0) throw new Win32Exception(num1); try { MXRecord recMx; for (ptr2 = ptr1; !ptr2.Equals(IntPtr.Zero); ptr2 = recMx.pNext) { recMx = (MXRecord)Marshal.PtrToStructure(ptr2, typeof(MXRecord)); if (recMx.wType == 15) list.Add(Marshal.PtrToStringAuto(recMx.pNameExchange)); } } finally { DnsRecordListFree(ptr1, 0); } return list.ToArray(); } [StructLayout(LayoutKind.Sequential)] private struct MXRecord { public IntPtr pNext; public string pName; public short wType; public short wDataLength; public int flags; public int dwTtl; public int dwReserved; public IntPtr pNameExchange; public short wPreference; public short Pad; } } } '@ Add-Type -TypeDefinition $Private:SourceCS -ErrorAction Stop $Script:global_dnsquery = $true } [PM.Dns.MXQuery]::Resolve($DomainName) | % { $rec = New-Object PSObject Add-Member -InputObject $rec -MemberType NoteProperty -Name "Host" -Value $_ Add-Member -InputObject $rec -MemberType NoteProperty -Name "AddressList" -Value $(Get-DnsAddressList $_) $rec } } Get-DnsMXQuery -DomainName "gmail.com"
Get-WmiObject -Class MicrosoftDNS_MXType – 命名空间根\ microsoftdns -ComputerName DC1 – 筛选器“DomainName ='domain.com。'”
在Server 2012 / Windows 8及更高版本上,您可以使用Resolve-DnsName :
Resolve-DnsName -Name mydomain.com -Type MX
来源使用PowerShell快速检查多个MXlogging 。