Как получить имя 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
Это выложит имена хостов и привязки портов каждого получающего соединителя в вашей организации. Затем вы должны выбрать, какой из них использовать.
Поскольку я не знаю, сколько у вас знаний об обмене, я остановлюсь здесь. Если что-то неясно, просто спросите.