2014-10-21 3 views
0

그래서 저는 stackoverflow를 많이 읽었습니다. 그리고 그 순간 저는 제 이해력으로 항상 도움이되었습니다. 지금은 여러 변수 중 하나와 일치하는 것에 난처한 점이있어서 수출에 대해 생각할 것입니다. .powershell은 여러 변수와 일치합니다

내 작업에 약간의 배경이 있습니다.

저는 여러 하위 도메인 (+4)이있는 AD 포리스트의 시스템 관리자입니다. 그러나 이러한 도메인을 하나의 도메인으로 통합하는 과정을 진행하고 있습니다.하지만 불행히도 각 도메인이 독립적으로 관리 될 때마다 오래된 '중복 SAM'문제 (그리고 우리가 파기를 시작하면 속이기 UPN을 확실히 보게됩니다).

이와 같이 -이 복제본을 찾기 위해 스크립트를 작성하려고합니다. 그래서이 도메인의 사용자를 지원하는 팀과이를 해결할 수 있습니다.

나는 이것을 통해 공정한 방법을 얻었습니다. 하나의 마이그레이션 도메인에 대한 SAM 목록을 내 보냈습니다.이를 PS로 구문 분석하고 모든 도메인에 대해 각 SAM을 조회하고 나 사용자 이름 OR $ null 변수.

그래서 지금은 'IF'명령이 두 개 이상의 변수를 일치시키고 어느 것이 일치하는지 보여주는 것에 대해 이해하고자합니다.

따라서, 예를 들어, 이러한 변수에서 ...

$one="MSmith01" 
$oneNT="DOMAIN1\MSmith01" 
$two="MSmith01" 
$twoNT="DOMAIN2\MSmith01" 
$three=$null 
$threeNT=$null 
$four=$null 
$fourNT=$null 
$five="MSmith01" 
$fiveNT="DOMAIN5\MSmith01" 
$six=$null 
$sixNT=$null 

어떻게 하나 개 이상의 변수가 일치하는 경우에 저를 표시하는 IF 명령을 작성하려면 어떻게해야합니까?

내가 작성하는 경우이 : 변수가있는 경우,

Duplicate Found - DOMAIN1\MSmith01, DOMAIN2\MSmith01, , , DOMAIN5\MSmith01,. 

을 :하지만

if ($one -match $two -match $three -match $four -match $five -match $six) {write-host "Duplicate Found - $oneNT, $twoNT, $threeNT, $fourNT, $fiveNT, $sixNT." -foregroundcolor "yellow"} 

그것은 나를 표시됩니다

$one=$null 
$oneNT=$null 
$two="MSmith01" 
$twoNT="DOMAIN2\MSmith01" 
$three="MSmith01" 
$threeNT="DOMAIN3\MSmith01" 
$four=$null 
$fourNT=$null 
$five=$null 
$fiveNT=$null 
$six=$null 
$sixNT=$null 

결과는 사실을 무시하는 것 DOMAIN2와 DOMAIN3에는 일치하는 SAM이 있고 "x -match y -match z"는 실제로 실제로 x를 비교하는 것으로 나타납니다. d y, 그래서 나는 아무것도 얻지 않는다. 분명히 부정확합니다.

누구나 내가 어떻게 비교하고 여러 변수 중에서 어떤 중복을 찾을 수 있는지 설명 할 수 있습니까?

감사

더 정교하게하려면 : 을 나는이 일을하고있어 내 변수를 얻으려면 :

$SAMAccountList=gc "C:\My Documents\Domain2SAMList.txt" 

$SamAccountList | % { 
$one=Get-QADUser -SamAccountName $_ -IncludedProperties SamAccountName -Server dc.domain1.local | foreach { $_.SAMAccountName } 
$oneNT=Get-QADUser -SamAccountName $_ -IncludedProperties NTAccountName -Service dc.domain1.local | foreach { $_.NTAccountName } 
$twoSAM=Get-QADUser -SamAccountName $_ -IncludedProperties SamAccountName -Service dc.domain2.local | foreach { $_.SAMAccountName } 
$twoNT=Get-QADUser -SamAccountName $_ -IncludedProperties NTAccountName -Service dc.domain2.local | foreach { $_.NTAccountName } 
#... 
#... 
#...etc for each domain 
} 

내가

답변

0

나는 둘 것입니다 위에서 언급 한 바와 같이이 그때 나에게 변수 세트를 제공합니다 그것들을 사용자 정의 객체에 저장하고 고유 한 이름으로 검색하십시오.

$NAMES = @() 

$NAMES += [pscustomobject] @{name=$one;nameNT=$oneNT} 
$NAMES += [pscustomobject] @{name=$two;nameNT=$twoNT} 
$NAMES += [pscustomobject] @{name=$three;nameNT=$threeNT} 
$NAMES += [pscustomobject] @{name=$four;nameNT=$fourNT} 
$NAMES += [pscustomobject] @{name=$five;nameNT=$fiveNT} 
$NAMES += [pscustomobject] @{name=$six;nameNT=$sixNT} 

$UniqueNames=($NAMES | Sort-Object -Property name -Unique).Name 

ForEach($Uniquename in $UniqueNames){ 

    if($Uniquename -ne $NULL){ 

    $SEARCH_RESULT=$NAMES|?{$_.Name -eq $Uniquename} 

    if ($SEARCH_RESULT.Count -gt 1) 
    {  
      $SEARCH_RESULT 
    } 
    } 
} 

나는 다음과 같은 결과

First data set 
name   nameNT 
----   ------ 
MSmith01  DOMAIN1\MSmith01 
MSmith01  DOMAIN2\MSmith01 
MSmith01  DOMAIN5\MSmith01 

Second data set 
name   nameNT 
----   ------ 
MSmith01  DOMAIN2\MSmith01 
MSmith01  DOMAIN3\MSmith01 
+0

안녕 hysh, 응답에 대한 감사를 얻을. 매우 감사. 나는 원래의 질문을 확장하여 나 자신을 도우 려하며 내가 도와주기를 바랍니다. – Dan

+0

'고유'에 대한 의견을 이해하지 못합니다. 실제로는 여러 개의 $ null 변수 또는 여러 개의 동일한 SAM 이름 목록을 갖게 될 것입니다. 사용자가 고유 한 매개 변수를 사용하는 경우 몇 가지 변수가 $ null 인 문제가 발생하지 않습니까? – Dan

+0

안녕하세요, 결과로 응답을 업데이트했습니다. 귀하가 우려하는 데이터 패턴을 제게 알려 주면 귀하를 도울 수 있습니다. –