2015-01-30 5 views
0

나는 이것을 며칠 동안 고민해 왔으며 그것을 어떻게 극복해야할지 확신이 없다.동적 변수를 기반으로 Powershell에서 배열을 만들고 채우는 방법은 무엇입니까?

가져 오기 다음과 같은 값을 가진 사용자의 CSV : 나는 다음을 수행 할 필요가

ID, 이름 지역

을 그때로 채우는 데 사용할 수있는 지역의 값을 기준으로 배열 만들기 그 지역의 ID와 이름, 즉.

Array_SEA

AA_SCOM, 아담 앤드류스, SEA

Array_OAK

BB_SCOM, 밥 바커, OAK

여기에 내가 지금 가지고 코드입니다 :

$list2 = ipcsv .\TSE_Contact_List.csv | sort-object BU 

$arraylist [email protected]() 

foreach ($vitem in $list2) 
{ 
$arraylist += New-Object PsObject -Property @{'Array' = "Array_" + $vitem.bu} 
} 
foreach ($varray in $arraylist) 
{ 
$arr = new-variable -Name $varray 
$arr.value += $varray.array 
$arr 
} 

중복 reg가있는 레코드에 대해 다음 오류가 생성됩니다. ions : 새 변수 : 이름이 '@ {Array = Array_SCA}'인 변수가 이미 있습니다.

값 '을 (를) 추가하려고하면 다음과 같은 오류가 표시됩니다.'value '속성을 찾을 수 없습니다. 그것이 존재하고 설정 가능한지 확인하십시오.

나는 두 번째 섹션에서 실제로 배열을 생성하지는 않지만 변수 이름을 배열 이름으로 바꾸지 않고 변수의 출력을 배열 이름에 전달하는 방법을 모르겠다. 감각.

내가 해시 테이블과 다음 시도했습니다, 그리고 그것을 가까이 가져옵니다

$list2 = ipcsv .\TSE_Contact_List.csv | sort-object BU 

$arraylist [email protected]{} 

foreach ($vitem in $list2){$arraylist[$vitem.bu] = @()} 

foreach ($record in $list2) 
{ 
$arraylist[$vitem.bu] += ($record.SCOMID,$record.Name,$record.BU) 
Write-host "Array: " 
$arraylist[$vitem.bu] 
write-host "" 
} 

이의 출력에 오류를 표시하지 않지만 그냥 각 반복에 대한 모든 레코드의 추가 필드를 보여주는 유지 목록의 각 BU를 배열 이름에 실제로 할당한다고 생각하지 않습니다.

+1

그룹 객체를 사용하지 않는 모든 이유와 그룹화 : 같은

$list2 = ipcsv .\TSE_Contact_List.csv | sort-object BU $arraylist = @{} foreach ($vitem in $list2){ if($arraylist.ContainsKey($vitem.BU)) { #Array exists, add item $arraylist[($vitem.BU)] += $vitem } else { #Array not found, creating it $arraylist[($vitem.BU)] = @($vitem) } } #TEST: List arrays and number of entries $arraylist.GetEnumerator() | % { "Array '$($_.Key)' has $($_.Value.Count) items" } 

또한 사용할 수 Group-Object? – mjolinor

답변

0

나는 해시 테이블 접근법을 좋아하지만 조금 미 조정할 것이다. 시도 : 지역별

$list2 = ipcsv .\TSE_Contact_List.csv | Group-Object BU 

#TEST: List groups(regions) and number of entries 
$list2 | % { 
    "Region '$($_.Name)' has $(@($_.Group).Count) items" 
} 
+1

두 가지를 함께 사용하는 이유는 무엇입니까? $ list2 = ipcsv. \ TSE_Contact_List.csv | 그룹 BU -AsHashTable -AsString #TEST : 그룹 (지역) 및 항목 수 나열 $ list2.getenumerator() | % { $ _. 키 "-" $ _. 값 | out-string } 이 방법은 훌륭하고 훌륭한 시작으로 나를 끌어옵니다. 감사합니다! 이제 값을 다시 가져 와서 다른 cmdlet으로 파이프하는 방법을 알아야합니다. – user1628184