2014-01-10 8 views
1

Мне нужно было получить некоторую помощь с массивом. Я создал один массив пользователей с именем поля EmailAddresses и они в следующем формате:Поиск значения внутри массива

{sip:[email protected], SMTP:[email protected], etc.... 

Таким образом, в первом массиве У меня есть около 150 или около того пользователей и каждая запись будет иметь 3 или 4 различных прокси-адреса ,

Я хочу, чтобы сценарий добавлял дополнительный адрес электронной почты, но прежде чем я сделаю эту работу, я хочу проверить, нет ли специального адреса электронной почты, который я обозначил, в первом массиве, который я только что создал. Итак, мой запрос, который вложен в a для каждого цикла, приведен ниже.

If ($NewEmailAddress -contains "*$Users.EmailAddresses*") 
    {Write-Host "The user name matches an existing entry." $NewEmailAddress}  
     else {echo "You are clear to use this name" $NewEmailAddress} 

Независимо от того, как я пытаюсь поиска -like, -contains и т.д ... Он никогда не кажется, чтобы найти какой-либо из конфликтов. Весь набор результатов всегда говорит, что я понимаю, что использую существующий адрес, хотя я знаю, что есть конфликт.

Является ли моя проблема поиском внутри массива или есть лучший способ построить массив, в первую очередь, чтобы включить основной адрес smtp и все псевдонимы?

Спасибо за помощь.

ответ

2

Я думаю, что это немного проще, чем вы пытаетесь это сделать.

Давайте предположим, что у вас есть массив адресов электронной почты, а именно:

$EmailList = @('[email protected]', '[email protected]', '[email protected]'); 

Если вы пытаетесь проверить, если массив содержит определенный элемент, все, что вам нужно сделать, это поместите массив в левой части оператора -contains, а с правой стороны - значение, которое вы проверяете.

$EmailList -contains '[email protected]'; 

Это должно привести к: $true.

Если у вас есть массив, который вам нужно проверить против массива, вам придется перебирать каждый элемент. Используя $EmailList массив, который мы имели раньше, и новый массив с именем $User.EmailAddresses, мы могли бы сделать что-то вроде этого:

foreach ($EmailAddress in $User.EmailAddresses) { 
    if ($EmailList -contains $EmailAddress) { 
     # Do something 
    } 
    else { 
     # Do something else 
    } 
} 
0

попробовать что-то вроде этого:

if (($Users.EmailAddresses | ? {$_ -like "*$NewEmailAddress*"}).Length -gt 0) { 
    Write-Host "Address $NewEmailAddress is already assigned." 
} else { 
    Write-Host "Address $NewEmailAddress is not yet assigned." 
} 
0

Это первый раз с помощью этого сайта, и я хотел бы сказать спасибо за все ответы. Это определенно помогло мне подтолкнуть меня в правильном направлении.

На самом деле это была моя логика в моем заявлении «IF».

If ($NewEmailAddress -contains "*$Users.EmailAddresses*") 

Это было противоположно тому, что мне было нужно. Моя логика спрашивала, содержится ли массив в адресе электронной почты пользователей, и реальность такова, что мне нужно было перевернуть это и спросить, содержится ли адрес электронной почты в массиве. Я понял это, когда увидел комментарий Тревора. Его логика была противоположной (и правильной) от моей. :)

Еще раз спасибо за помощь.

Michael

Смежные вопросы