Windows 7,PowerShell 4.0。计算机位于Windows域中。
我需要获取SMTP服务器名称(使用send-mailmessage
cmdlet)。 $PSEmailServer
为空。
我阅读了有关Get-AcceptedDomain
cmdlet的this TechNet页面。但我看到了这一点(在TechNet页面上):
此cmdlet可在内部部署Exchange Server 2016中使用 基于云的服务。
如何获取SMTP服务器名称或其IP地址?
答案 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。