2013-06-27 97 views
0

我無法使該腳本按預期工作。請參考下面Powershell問題使用嵌套Foreach循環比較兩個陣列

我有兩個數組$ newusers使用和$ oldusers下面的數據在每個

$newusers = fadbd34|Alan Simon|Jones,ken A 
      fadbk45|Alice Lund|Dave,John h 
      fadoo78|Nathan Hugh|Trot,Carol M 
      fadt359|Jon Hart|Jones,Karen D 
      fafyl38|Miley Mcghee|Main,Josh D 
      abbrt86|Andrew Hayden|Mary,Martin G 
      frt5096|Andrew Cork|Kain,Martha E 
      ikka155|Andrew Mullen|Raymond, Gavin G 

Note: Please observe the last 3 users from $newusers are not there in $oldusers 


$oldusers = fadbd34|Alan Simon|11754 
      fadbk45|Alice Lund|11755 
      fadoo78|Nathan Hugh|11755 
      fadt359|Jon Hart|11755 
      fafyl38|Miley Mcghee|11732 

現在,我'嘗試寫一個腳本來檢查,如果第一場(用戶ID)從$ newusers使用在$ oldusers 中追蹤,然後將$ newusers [0],$ newusers [1],$ oldusers [2],$ newusers [2]加入到$ Activeusers數組中,並且在$ oldusers中未找到新用戶標識加入$ newusers [ 0],$ newusers [1],$ newusers [2]轉換爲$ Inactiveusers數組。我得到不正確的結果。以下是我能想出的。

$Activeusers = @() 
$Inactiveusers = @() 
foreach ($nrow in $newusers) { 
    foreach ($orow in $oldusers){ 
    ($idNew,$newusrname,$mgr) = $newrow.split('|') 
    ($idOld,$oldusrname,$costcntr) = $oldrow.split('|') 
     if ($idOld[0] -ieq $idOld[0]){ 
     $Activeusers += [string]::join('|',($idNew[0],$nusrname[1],$cstcntr[2],$mgr[2])) 
     } else {  
     $Inactiveusers += [string]::join('|',($idNew[0],$nusrname[1],$mgr[2])) 
    } 
    } 
} 

回答

4

問題在於你如何循環記錄。您將新用戶列表中的第一條記錄與第二個列表中的所有用戶列表進行比較。這個基本的if/else語句會導致您獲得以下結果。例如:

Loop 1: compare: 
fadbd34 = fadbd34 -> Active User 
Loop 2: compare: 
fadbd34 = fadbk45 -> Inactive User 
Loop 3: compare: 
fadbd34 = fadoo78 -> Inactive User 
... 

這會導致您獲得1個正確的活動用戶以及5個非活動用戶的列表。每當用戶與舊列表中的用戶不匹配時,就會將其存儲爲非活動用戶。 (清理之後,刪除不必要的數組引用(如果將字符串拆分並將其存儲在變量中,則不需要數組引用),修復變量名稱,以及更改if語句以比較$ idOld到$ idNew)是這樣的:

$newusers = 
"fadbd34|Alan Simon|Jones,ken A", 
"fadbk45|Alice Lund|Dave,John h", 
"fadoo78|Nathan Hugh|Trot,Carol M", 
"fadt359|Jon Hart|Jones,Karen D", 
"fafyl38|Miley Mcghee|Main,Josh D", 
"abbrt86|Andrew Hayden|Mary,Martin G", 
"frt5096|Andrew Cork|Kain,Martha E", 
"ikka155|Andrew Mullen|Raymond, Gavin G" 

$oldusers = 
"fadbd34|Alan Simon|Jones,ken A", 
"fadbk45|Alice Lund|Dave,John h", 
"fadoo78|Nathan Hugh|Trot,Carol M", 
"fadt359|Jon Hart|Jones,Karen D", 
"fafyl38|Miley Mcghee|Main,Josh D", 
"abbrt86|Andrew Hayden|Mary,Martin G" 

$Activeusers = @() 
$Inactiveusers = @() 
foreach ($nrow in $newusers) { 
    $Active = $false 
    ($idNew,$newusrname,$mgr) = $nrow.split('|') 
    foreach ($orow in $oldusers){ 
     ($idOld,$oldusrname,$costcntr) = $orow.split('|') 
     if ($idNew -ieq $idOld){ 
      $Activeusers += [string]::join('|',($idNew,$nusrname,$costcntr,$mgr)) 
      $Active = $true 
     } 
    } 
    if (!$Active) 
    { 
     $Inactiveusers += [string]::join('|',($idNew,$newusrname,$mgr)) 
    } 
}