2016-10-04 2 views
0

안녕하세요, PowerShell 사용자 지정 개체를 출력하는 데 약간의 문제가 있습니다.겹치는 필드가있는 배열 출력

사람과 과일이 무엇인지 보여주는 배열입니다 (정보는 다른 여러 프로세스를 통해 수집되어 실제 PITA로 변경됩니다).

First, last,<fruit> 
Joe, Bloggs, apple=$true, banana=$true, pear=$true 
Fred, Smith, apple=$true, melon=$true, banana=$true 
Mick, Jones, pear=$true, melon=$true 

$ array | 플로리다 * 모든 것이 잘 보이는 : 불행하게도

First: Joe 
Last: Bloggs 
apple: True 
Banana: True 
Pear: True 

First: Mick 
Last: Jones 
apple: True 
melon: True 
banana: True 

First: Fred 
Last: Smith 
Pear: True 
melon: True 

을-있는 gridview 또는 수출 CSV 또는 $ 배열을 사용하는 경우 |에만 모든 기록이 예를 통해 공통 필드를 보여줍니다 그 문제에 피트 *

$array|ft * 
First  Last 
----  ---- 
Joe  Bloggs 
Mick  Jones 
Fred  Smith 
나는 그것을 위해 무엇을하고 싶은 무엇

은 t

$array|ft * 
First  Last  Apple  Banana  Pear  Melon 
----  ----  ----  ----  ----  ---- 
Joe  Bloggs True  True  True 
Mick  Jones True  True    True 
Fred  Smith       True  True 

(가장 쉬운 방법은 단지 것, 모든 조합을 보여하지만, 단지 존재하지 않는 사람을 그리워하다 O를) 미리

감사를 과일에 "

First: Joe 
Last: Bloggs 
Fruit: {apple, banana, melon} 

같은 각 레코드/사람 키/값을"각 과일에 가입하지만 최종 목표를 위해 아주 잘 작동하지 않을 것입니다 . +

$fruits = $array | ForEach { $_.PSObject.Properties.Name -ne 'First' -ne 'Last' } | 
        Sort -unique 
$properties = @('First', 'Last') + $fruits 
$array | ft $properties 

(위의 코드는 PS3.0입니다 :

답변

1

형식 - 테이블은 첫 번째 요소의 속성 목록을 사용하기 때문에 수동으로 배열에있는 모든 속성의 목록을 작성해야합니다

$missing = @{} 
$array | ForEach { $_.PSObject.Properties | Select -expand Name } | 
     Sort -Unique | 
     Where { $array[0].$_ -eq $null } | 
     ForEach { $missing.$_ = $null } 
$array[0] | Add-Member -NotePropertyMembers $missing 
0 : PS2.0에 있도록하는 것은 그대로 그 형식 - 테이블/내보내기-CSV /를 ConvertTo-CSV 제대로 작동)

($_.PSObject.Properties | Select -expand Name) 대신 $_.PSObject.Properties.Name의를 사용하거나 첫 번째 요소 정도 해결

이제 cmdlet을 출력합니다 모든 속성 :

  • $array | ft

    First Last apple Banana Pear melon 
    ----- ---- ----- ------ ---- ----- 
    Joe Bloggs True True True  
    Mick Jones True True  True 
    Fred Smith    True True 
    
  • $array | ConvertTo-Csv -NoTypeInformation

    "First","Last","apple","Banana","Pear","melon" 
    "Joe","Bloggs","True","True","True", 
    "Mick","Jones","True","True",,"True" 
    "Fred","Smith",,,"True","True" 
    
+0

그건 절대적으로 완벽하게 작동합니다. 감사합니다. – Nerden