Я пытался понять, как изменить прокси-адреса некоторых из моих пользователей в AD с помощью PowerShell. Моя основная цель - использовать Get-ADObject для запроса AD для определенного набора пользователей и удаления всех SMTP-адресов для определенного домена из пользовательских прокси-адресов (если он существует).

$ADobjects = @(Get-ADObject -Filter 'objectClass -eq "User"' -Properties mailNickname, ProxyAddresses) | Where-Object {$_.ProxyAddresses -Match "@BADdomain.com"}

ProxyAddresses могут выглядеть так:

SMTP:john.doe@domainA.com, smtp:john.doe@BADdomain.com, smtp:john.doe@domainC.com, X500:/o=info/ou=test/cn=john.doe, x400:/o=info/ou=test/cn=john.doe, smtp:john.doe@domain.local

Здесь нет определенного порядка, адреса X500 могут быть первыми, могут быть последними, SMTP, X400 и т.д. Верхний регистр SMTP указывает основной SMTP-адрес, нижний регистр указывает дополнительный адрес. Вполне возможно, что john.doe@BADdomain.com может быть основным SMTP-адресом (я буду игнорировать регистр при их разделении - позже я могу проверить регистр для изменения основного SMTP, если это необходимо). И (я могу ошибаться), но кажется, что proxyAddresses - это не обычный массив (может быть, это многомерный массив)? Но когда я пытаюсь разбить массив на «,», я получаю сообщение об ошибке:

ForEach ($Object in $ADobjects)
{
$TempInfo = $Object.ProxyAddresses.Split(",")
write-host $TempInfo
}

Ошибка, которую он выдает:

Method invocation failed because [Microsoft.ActiveDirectory.Management.ADPropertyValueCollection] doesn't contain a method named 'Split'.

Могу ли я "разбить" proxyAddresses на отдельный массив, чтобы я мог работать с каждым из них и удалить его, если имя домена @ BADdomain.com? Я мог бы затем удалить его из массива. Или можно использовать ".Заменить "и заменить все, начиная с SMTP, на BADdomain.com (если BADdomain.com найден до следующего SMTP)? Я не знаю, я пробовал разные способы, но безуспешно.

Большое спасибо!!

1 ответ1

1

Split для разделения строк; свойство ProxyAddresses объекта пользователя не является строкой, поэтому оно не поддерживает разделение.

Попробуйте что-то вроде этого (полностью не проверено :)):

ForEach ($userObject in $ADobjects)
{
  ForEach ($proxyAddress in $userObject.ProxyAddresses)
  {
    write-host $proxyAddress
  }
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .