2014-01-10 68 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