2014-01-10 66 views
1

我需要得到一些幫助內部數組。我創建的用戶的一個陣列與EmailAddresses的字段名稱和它們如下格式化:搜索值的數組

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

所以,這個第一陣列中我有大約150個左右的用戶和每個條目將具有3個或4個不同的代理地址。

我想腳本添加額外的電子郵件地址,但我做的工作之前,我要檢查,看看是否我指定專門的電子郵件地址不第一個數組我只是建立在已經存在。所以,我爲每個循環嵌套在一個查詢下面。

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*") 

這與我所需要的相反。我的邏輯是問陣列是否包含在用戶的電子郵件地址,現實是我需要翻轉,並詢問電子郵件地址是否包含在陣列中。當我看到Trevor的評論時,我意識到。他的邏輯與我的邏輯是相反的(並且是正確的)。 :)

再次感謝所有的幫助。

Michael