【问题标题】:How to get SMTP server name through PowerShell when $PSEmailServer is empty?$PSEmailServer 为空时如何通过 PowerShell 获取 SMTP 服务器名称?
【发布时间】:2020-03-24 03:03:31
【问题描述】:

Windows 7、PowerShell 4.0。计算机在 Windows 域中。

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

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

此 cmdlet 在本地 Exchange Server 2016 和 基于云的服务。

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

【问题讨论】:

  • 我认为我从未听说过 SMTP 服务定位器,您认为这种机制如何工作?如果您在您的组织中部署了 Exchange,您也许可以通过 autodiscovery 找到候选服务器,但这似乎有点矫枉过正
  • 询问您当地的邮件管理员。严重地。在 DNS 中查询 smtpmail 这样的明显名称可能会取得一些成功,但这些只是猜测。也许组织使用云邮件,在这种情况下,您需要的不仅仅是 SMTP 服务器的名称。
  • 不要把事情复杂化。您可以在您的 MS Outlook 客户端中找到它。 File > Account Settings > Account Settings > 双击您的电子邮件地址 > 顶部条目Server: xxxx
  • 伙计们,我知道我们的 SMTP 服务器的名称,但我很感兴趣如何通过 PowerShell 获取该名称。 :)

标签: powershell powershell-4.0


【解决方案1】:

如果正确定义,可以通过 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 最优化和最实用的解决方案。

【讨论】:

    【解决方案2】:

    假设计算机是部署了 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
    

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

    由于我不知道你有多少 Exchange 知识,我就在这里停止。如果有不清楚的地方,尽管问。

    【讨论】:

    • 我收到错误消息:指定的activedirectory 模块未加载,因为在模块目录之一中未找到该模块的有效文件。跨度>
    • 嗯...但是在该页面上我看到:Active Directory-Modul 在以下版本的 Windows Server 2008 R2 和 Windows 7 中可用:... Windows 7。我有 Windows 7。我也没有看到“Active Directory-Modul for Windows PowerShell”。 :(
    • You need to install RSAT. 请仔细阅读安装说明。
    • 在安装过程中,我收到它已经安装的消息。
    猜你喜欢
    • 1970-01-01
    • 2012-10-20
    • 2016-10-19
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    相关资源
    最近更新 更多