Я пытаюсь обновить свойство учетной записи пользователя AD ProxyAddresses. Я прочитал много тем об этом и применил один из предложенных подходов ( этот ), но он не работает для меня. Почему? Я использую следующий фрагмент кода (это часть скрипта, обновляющая данные большего количества пользователей):
$ADUser = SearchADUser -Kogo "sAMAccountName -eq '$($WzorUser.sAMAccountName)'"
...
1.$ProxyOK = $false
2.$Proxies = $ADUser.ProxyAddresses
3.$Proxies | ForEach-Object {
4. $_ = $_ -replace 'SMTP', 'smtp'
5. if ($_ -match $NoweMail) {
6. $_ = $_ -replace 'smtp', 'SMTP'
7. $ProxyOK = $true
8. }
9.}
10.if (!($ProxyOK)) { $Proxies += ("SMTP:$($NoweMail)") }
...
if (!([string]::IsNullOrEmpty($Proxies))) {
$AttrToReplace.Add("ProxyAddresses", $Proxies)
Set-ADUser -Identity $ADUser.sAMAccountName -Server $ADDC @Attr #-PassThru -WhatIf
При циклическом выполнении прокси его элементы обрабатываются правильно: буквы для всех в нижнем и верхнем регистре, если новая почта уже присутствовал. Но Прокси не изменился. Нужно ли каждый элемент каким-либо образом сохранять или заменять в объекте?
Обновление 2020-04-02
Потому что усилия сторонника (@Theo еще раз спасибо за Ваша помощь) сосредоточиться на замене метода. Я пытаюсь более подробно объяснить мою проблему.
Целевые значения proxyAddresses пользователей (это редкий случай, когда женщины возвращаются к ее девичьей фамилии, записанной в AD):
SMTP : анна. nowak22@lp.pl
smtp : a. b@moc.com
Исходные значения (строка 2):
[DBG]: PS X:\>> $Proxies
smtp:anna.nowak22@lp.pl
SMTP:a.b@moc.com
Пока зацикливание на каждом элементе прокси (строка 9):
[DBG]: PS X:\>> $_
SMTP:anna.nowak22@lp.pl
[DBG]: PS X:\>> $Proxies
smtp:anna.nowak22@lp.pl
SMTP:a.b@moc.com
[DBG]: PS X:\>> $_
smtp:a.b@moc.com
[DBG]: PS X:\>> $Proxies
smtp:anna.nowak22@lp.pl
SMTP:a.b@moc.com
Как видно, $ Proxies не отражает изменений.
Если было только одно значение ProxyAddresses, не равное новой почте, новая почта была добавлена как SMTP к существующей, которая также передается как SMTP (два основных ProxyAddresses).
Я пытался создать новую переменную и назначить ей каждое значение соответственно, но я не знаю, как это сделать. обрабатывать его.
$newProxies = $null
$Proxies | ForEach-Object {
$_ = $_ -creplace 'SMTP', 'smtp'
if ($_ -match $NoweMail) {
$_ = $_ -creplace 'smtp', 'SMTP'
$ProxyOK = $true
}
$newProxies.add($_)
}
Выше выдает ошибку
Yo Вы не можете вызвать метод для выражения с нулевым значением
$newProxies += $_
создает одну строку SMTP: anna. nowak22@lp.pl smtp: a. b@moc.com, которая добавляется как single ProxyAddress.
Как я уже отметил, $ Proxies - это особый объект AD, и я не знаю, как создать объект такого типа и как добавить в него новые элементы.