在数组中搜索值

时间:2014-01-10 01:31:12

标签: arrays powershell exchange-server

我需要获得一些数组的帮助。我创建了一个用户名为EmailAddresses的用户数组,其格式如下:

{sip:jsmith@domain.com, SMTP:jsmith@domain.com,  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地址和所有别名?

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

我认为这比你想要的更容易。

假设您有一系列电子邮件地址,如下所示:

$EmailList = @('trevor@contoso.com', 'nancy@contoso.com', 'billy@contoso.com');

如果您正在尝试检查数组是否包含特定项目,那么您只需将数组放在-contains运算符的左侧,并在右侧,你正在检查的价值。

$EmailList -contains 'trevor@contoso.com';

这应该产生以下结果:$true

如果您有一个需要检查数组的数组,则必须迭代每个元素。使用我们之前使用的$EmailList数组和一个名为$User.EmailAddresses的新数组,我们可以这样做:

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

答案 1 :(得分: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."
}

答案 2 :(得分:0)

这是第一次使用此网站,我想对所有答案表示感谢。这无疑帮助我朝着正确的方向发展。

真正发生的是我在“IF”声明中的逻辑。

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

与我需要的相反。我的逻辑是询问Array是否包含在用户的电子邮件地址中,而现实是我需要翻转它并询问电子邮件地址是否包含在数组中。当我看到Trevor的评论时,我才意识到。他的逻辑与我的相反(也是正确的)。 :)

再次感谢您的帮助。

迈克尔