Я пытаюсь настроить SMTP-сервер Windows Server 2012 с помощью PowerShell.
Я подключился к использованию IISSmtpServerSettings CimObject.
Я получаю объект, применяю свои изменения (разрешаю localhost ретранслировать список отправителей), и сценарий завершается без ошибок.
Однако теперь я не могу запустить SMTP-сервер.
После тщательного изучения объекта Cim до и после моего изменения выясняется, что моя настройка SecureBindings также меняется.
Отсюда: SecureBindings: {SecureBinding (IP = "", Port)}
На это: SecureBindings: {SecureBinding (IP = "", Port = "")}
Я попытался установить параметр SecureBindings, но получаю сообщение об ошибке «Адаптер не может установить значение свойства SecureBindings»
Итак, мой вопрос, как я могу
Мой сценарий выглядит так:
$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 полностью отличаются от программной позиции.
Там должен не будет никакой опасности или неблагоприятных последствий от этого. То, что вы не видите, скорее всего, связано с чем-то еще не обнаруженным. Возможно, могут помочь сообщения об ошибках или журналы? Обязательно отправьте их, если они у вас есть.