1

Я пытаюсь написать сценарий PowerShell, который будет перебирать ProxyAddresses для всех моих пользовательских объектов AD. Если у пользователя есть SMTP-адрес с USER@DOMAIN.LOCAL, я хочу, чтобы он проверил, есть ли у него соответствующий SMTP-адрес USER@DOMAIN.COM, а если нет, то добавьте его и т.д.

$ADobjects = @(Get-ADObject -Filter 'objectClass -eq "User"' -Properties mailNickname,ProxyAddresses -SearchBase "OU=Test,DC=domain,DC=local")

$TempArr = @()
$OldDomain = "@domain.local"
$NewDomain = "@domain.com"

$ADobjects | ForEach-Object { ## Cycle thru each AD object
    $PrimaryProxyAddress = $_.mailNickname+$NewDomain
    $TempStr = ""
    $TempAdd = ""
    If ($ADobjects.Count -ge 1) ## Make sure there is at least one item to work on
        {
        $TempArr = $_.ProxyAddresses ## Set $TempArr so that it contains all of the proxy addresses
        $TempArr | ForEach-Object { ## Cycle thru each proxy address of each AD object
        If ($_.Contains($OldDomain) -eq "True") ## Does the proxy address contain the old domain?
            { ## Come here if the proxy address contains the old domain
            $TempStr = $_ -replace $OldDomain, $NewDomain ## Replace the $OldDomain name with $NewDomain
            If ($TempArr.Contains($TempStr) -ne "True") ## See if we already have an address with the new domain name
                {
                write-host $TempStr
                $TempAdd = $TempAdd + " " + $TempStr ## We don't have one so add it to the list of SMTP addresses to add
                ## I've removed all of the addition stuff to keep the script shorter
                }
            }
        }
        }
}

Это работает, пока я не доберусь до части

If ($TempArr.Contains($TempStr) -ne "True")

Массив $ TempArr может быть что-то вроде

“SMTP:user@domain.local smtp:user@domain.com smtp:noone@domain.local smtp:user@newold.com x400 etc”

$ TempStr может быть что-то вроде

“SMTP:user@domain.com”

Мой $ TempStr существует в массиве $ TempArr, но мой оператор IF никогда не возвращает TRUE (поэтому он всегда думает, что оператор IF равен –ne TRUE).

Разве CONTAINS не должен быть нечувствительным к регистру по умолчанию в PowerShell? Если он не учитывает регистр, разве «SMTP:user@domain.com» -eq «smtp:user@domain.com»? Или это может быть проблема с типом данных (я не получаю никаких ошибок), так как один - массив, а другой - строка? Что мне здесь не хватает?

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

1 ответ1

3

Разве CONTAINS не должен быть нечувствительным к регистру по умолчанию в PowerShell?

Оператор -contains без учета регистра.

.Метод Contains() чувствителен к регистру.

Если вы хотите использовать метод Contains(), преобразуйте обе строки в один регистр перед сравнением. Что-то вроде:

If ($TempArr.ToLower().Contains($TempStr.ToLower()) -ne "True")

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