Назад | Перейти на главную страницу

Настройка RelayIPList с помощью CimObject нарушает работу сервера SMTP в Windows

Я пытаюсь настроить SMTP-сервер Windows Server 2012 с помощью PowerShell.

Я подключился к использованию IISSmtpServerSettings CimObject.

Я получаю объект, применяю свои изменения (разрешаю localhost ретранслировать список отправителей), и сценарий завершается без ошибок.

Однако теперь я не могу запустить SMTP-сервер.

После тщательного изучения объекта Cim до и после моего изменения выясняется, что моя настройка SecureBindings также меняется.

Отсюда: SecureBindings: {SecureBinding (IP = "", Port)}

На это: SecureBindings: {SecureBinding (IP = "", Port = "")}

Я попытался установить параметр SecureBindings, но получаю сообщение об ошибке «Адаптер не может установить значение свойства SecureBindings»

Итак, мой вопрос, как я могу

  1. Остановите мой скрипт от воздействия на SecureBindings в первую очередь
  2. Установите для SecureBindings значение, которое не приводит к сбою запуска SMTP-сервера.

Мой сценарий выглядит так:

$ErrorActionPreference = "Stop"
$error.Clear()

# Get Cim object
$smtpInstance = Get-CimInstance -Namespace root/MicrosoftIISv2 -ClassName IIsSmtpServerSetting -Filter "Name = 'SmtpSvc/1'"

# Set relay IP of 127.0.0.1
$relayIPs = @( 24, 0, 0, 128, 32, 0, 0, 128, 60, 0, 0, 128, 68, 0, 0, 128, 1, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 127, 0, 0, 1 )

# Set relay IP list
$smtpInstance.RelayIpList = $relayIPs

# Save changes
Set-CimInstance -CimInstance $smtpInstance -PassThru

Я не мог решить исходную проблему с добавлением CimInstance значения "".

Однако мне удалось заставить это работать, переключившись на WmiObject:

# Get Wmi object
$smtpInstance = Get-WmiObject -Namespace root\MicrosoftIISv2 -ComputerName localhost -Query "Select * From IisSmtpServerSetting"

# Set relay IP of 127.0.0.1
$relayIPs = @( 24, 0, 0, 128, 32, 0, 0, 128, 60, 0, 0, 128, 68, 0, 0, 128, 1, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 127, 0, 0, 1 )

# Set relay IP list
$smtpInstance.RelayIpList = $relayIPs

# Save changes
$smtpInstance.Put() | Out-Null

Изменение, которое вы видите, тривиально. Значение изменяется с нуля на пустую строку. Это не редкость, когда драйверы, прошивки или интерфейсы (wmi, cim, пользовательские апплеты) вносят небольшие изменения в данные таким образом.

Хотя я не могу указать конкретную строку кода в ваших обстоятельствах, я могу сказать вам наиболее вероятный способ, которым это происходит. Нередко разработчик устанавливает свой код так, чтобы нулевые переменные были запрещены. Чтобы выполнять какие-либо действия с объектом, он должен быть сериализован и инстанцирован. В этом случае свойству присваиваются значения, а значение null преобразуется в пустое. Верьте или нет, null и empty полностью отличаются от программной позиции.

Там должен не будет никакой опасности или неблагоприятных последствий от этого. То, что вы не видите, скорее всего, связано с чем-то еще не обнаруженным. Возможно, могут помочь сообщения об ошибках или журналы? Обязательно отправьте их, если они у вас есть.