2014-01-10 3 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입니다.

배열에 대해 검사해야하는 배열이있는 경우 각 요소를 반복해야합니다.

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

이이 사이트를 사용하여 처음 내가 모든 답변에 대한 감사의 말씀을 원 : 우리가 이전에 있던 $EmailList 배열 및 $User.EmailAddresses라는 새로운 배열을 사용하여, 우리는 같은 것을 할 수 있습니다. 그것은 확실히 올바른 방향으로 나를 밀어 넣는 것을 도왔습니다.

정말 무슨 일이 있었는지 내 "IF"진술에 내 논리가있었습니다.

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

내가 필요한 것과 반대입니다. 내 논리는 Array가 사용자 이메일 주소에 포함되어 있는지 묻는 것이 었습니다. 현실은 내가 뒤집어 이메일 주소가 배열에 포함되어 있는지 묻는 것이 필요했습니다. 나는 Trevor의 코멘트를 보았을 때 그것을 깨달았다. 그의 논리는 내 것과 정반대였다. :)

모든 도움을 주셔서 다시 한 번 감사드립니다.

마이클