Как получить имя SMTP-сервера через PowerShell, когда $PSEmailServer пуст?

Windows 7, PowerShell 4.0. Компьютер находится в домене Windows.

Мне нужно получить имя SMTP-сервера (для использования send-mailmessage Командлет). $PSEmailServer пустой.

Я прочитал эту страницу TechNet о Get-AcceptedDomain Командлет. Но я вижу это (на странице TechNet):

Этот командлет доступен в локальном Exchange Server 2016 и в облачной службе.

Как узнать имя SMTP-сервера или его IP-адрес?

1 ответ

При правильном определении адрес SMTP-сервера, имя хоста или IP-адрес, можно задать с помощью записи SCP в AD или записи DNS для автообнаружения сервера Exchange. Существует решение Powershell для запросов к SCP, но решение Autodiscover короче, поэтому я продолжу его.

Это работает на 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.

Предполагая, что компьютер является членом домена с развернутым Exchange, и вы хотите использовать Exchange в качестве ретранслятора STMP для send-mailmessageВы можете задать конфигурацию обмена в контексте конфигурации 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

Это выложит имена хостов и привязки портов каждого получающего соединителя в вашей организации. Затем вы должны выбрать, какой из них использовать.

Поскольку я не знаю, сколько у вас знаний об обмене, я остановлюсь здесь. Если что-то неясно, просто спросите.

Другие вопросы по тегам