当$ PSEmailServer为空时,如何通过PowerShell获取SMTP服务器名称?

时间:2016-02-05 10:15:48

标签: powershell powershell-v4.0

Windows 7,PowerShell 4.0。计算机位于Windows域中。

我需要获取SMTP服务器名称(使用send-mailmessage cmdlet)。 $PSEmailServer为空。

我阅读了有关Get-AcceptedDomain cmdlet的this TechNet页面。但我看到了这一点(在TechNet页面上):

  

此cmdlet可在内部部署Exchange Server 2016中使用   基于云的服务。

如何获取SMTP服务器名称或其IP地址?

2 个答案:

答案 0 :(得分:0)

假设计算机是部署了Exchange的域的成员,并且您希望将Exchange用作send-mailmessage的STMP中继,则可以在AD配置上下文中询问交换机配置:

import-module activedirectory
$ag = "Exchange Administrative Group (ABCDEFGHIJKLM)" #enter your EAD
$c = "Acme" # Enter your company name (get this form ADSIEdit if unknown)
$sb = ("CN=Servers,CN=" + $ag + ",CN=Administrative Groups,CN=" + $c + ",CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=staff,DC=hsrw")

$server = Get-ADObject -Properties cn, msExchSMTPReceiveConnectorFQDN, msExchSmtpReceiveBindings, msExchSMTPReceiveInboundSecurityFlag -SearchBase $sb -filter { objectClass -eq "msExchSmtpReceiveConnector"}
$server | ft cn, msExchSMTPReceiveConnectorFQDN, msExchSmtpReceiveBindings, msExchSMTPReceiveInboundSecurityFlag

这会吐出组织中每个接收连接器的主机名和端口绑定。然后你必须选择使用哪一个。

由于我不知道你有多少交流知识,我会在这里停下来。如果事情不清楚,请问。

答案 1 :(得分:0)

如果定义正确,则可以通过AD的SCP记录或Exchange Server的自动发现DNS记录来设置SMTP服务器地址(主机名或IP)。有Powershell solution for querying SCP,但是自动发现解决方案更短,因此我将继续进行下去。

这适用于Exchange Server 2010和更高版本。它也可以与Exchange Server 2007一起使用,但是我个人从未使用过它。

您可以获取主机名; $MailServer = [Net.DNS]::GetHostByAddress([Net.DNS]::GetHostEntry("Autodiscover").AddressList[0]).Hostname

或IP地址(作为字符串); $MailServer = [Net.DNS]::GetHostByAddress([Net.DNS]::GetHostEntry("Autodiscover").AddressList[0]).AddressList[0].IPAddressToString

由于GetHostByAddress(string)返回类System.Net.IPHostEntry的实例,因此您可以使用一些属性。有关详细信息,请阅读Microsoft Docs

PS:我知道,将整数的索引用作值不是最佳实践,但是AddressList是一个字符串数组。因此,它没有定义诸如FirstOrDefault()之类的方法或诸如DefaultAddress之类的属性。到目前为止,这是最优化,最实用的解决方案AFAIK。