Не все отображаемые свойства

Когда мы пытаемся экспортировать данные в другие функции по конвейеру, мы наблюдаем странное поведение в PowerShell.

Пример кода:

$Array = @() $Obj1 = [PSCustomObject]@{ Member1 = 'First' Member2 = 'Second' } $Obj2 = [PSCustomObject]@{ Member1 = 'First' Member2 = 'Second' Member3 = 'Third' } $Array = $Obj1, $Obj2 $Array | Out-GridView -Title 'Not showing Member3' $Array = $Obj2, $Obj1 $Array | Out-GridView -Title 'All members correctly displayed' 

В приведенном выше примере вы можете увидеть, что, когда первый объект содержит только 2 properties , Out-GridView CmdLet (и другие) отображает только 2 properties , хотя второй объект имеет 3 properties . Однако, когда первый объект в массиве имеет 3 properties он отображает их все правильно.

Есть ли способ обойти это? Потому что невозможно предсказать, сколько properties на объекте будет, и если объект с большинством properties будет первым в array .

Однажды у меня был один и тот же опыт, и я создал следующую многоразовую функцию « Union »:

 Function Union { $Union = @() $Input | ForEach { If ($Union.Count) {$_ | Get-Member | Where {!($Union[0] | Get-Member $_.Name)} | ForEach {$Union[0] | Add-Member NoteProperty $_.Name $Null}} $Union += $_ } $Union } 

Применение:

 $Obj1, $Obj2 | Union | Out-GridView -Title 'Showing all members' 

Он также должен работать со сложными объектами. Некоторые стандартные командлеты выводят сразу несколько типов объектов, и если вы их просматриваете (например, Out-GridView ) или выгружаете их в файл (например, Export-Csv ), вы можете пропустить много свойств. Возьмем еще один пример:

 Get-WmiObject -Namespace root/hp/instrumentedBIOS -Class hp_biosSetting | Union | Export-Csv ".\HPBIOS.csv" 

Добавлено 2014-09-19:

Может быть, это уже между строками в комментариях $Array | Select * | … $Array | Select * | … $Array | Select * | … не решит проблему, но специально $Array | Select Member1, Member2, Member3 | … свойства $Array | Select Member1, Member2, Member3 | … $Array | Select Member1, Member2, Member3 | … $Array | Select Member1, Member2, Member3 | … делает.
Кроме того, хотя в большинстве случаев функция Union будет работать, есть некоторые исключения из этого, поскольку он будет только выравнивать первый объект с остальными. Рассмотрим следующий объект:

 $List = @( New-Object PSObject -Property @{Id = 2} New-Object PSObject -Property @{Id = 1} New-Object PSObject -Property @{Id = 3; Name = "Test"} ) 

Если вы ExportTo-CSV этот объект, все выглядит нормально, и если вы, например, ExportTo-CSV и работаете с export .csv файлом, то у вас никогда не будет проблем.

 $List | Union Id Name -- ---- 2 1 3 Test 

Тем не менее есть улов, поскольку только первый объект выровнен. Если вы, например, сортируете результат на Id ( Sort Id ) или занимаете только последние 2 ( Select -Last 2 ) записи, Name не указано, потому что второй объект не содержит свойства Name :

 $List | Union | Sort Id Id -- 1 2 3 

Поэтому я переписал функцию Union-Object (Alias Union )`):

Союз-Object

 Function Union-Object ([String[]]$Property = @()) { # Version 00.02.01, by iRon $Objects = $Input | ForEach {$_} If (!$Property) {ForEach ($Object in $Objects) {$Property += $Object.PSObject.Properties | Select -Expand Name}} $Objects | Select ([String[]]($Property | Select -Unique)) } Set-Alias Union Union-Object 

Синтаксис:

 $Array | Union | Out-GridView -Title 'All members correctly displayed' 

Для последней версии Union-Object см. https://powersnippets.com/union-object/

  • Сравнение свойств объекта в c #
  • Как обнаружить системную информацию типа os или типа устройства
  • Автоматически реализованные геттеры и сеттеры против общедоступных полей
  • Interesting Posts

    Трансатлантический пинг быстрее, чем отправка пикселя на экран?

    Mockito: проверка с помощью общих параметров

    Что такое копирование и как он оптимизирует идиому копирования и свопинга?

    Какой метод вы используете для развертывания приложений ASP.Net в дикой природе?

    Помните, какая вкладка была активной после обновления

    Swing: кнопки переключения каналов вместе с группой кнопок вместе с соответствующими пунктами меню

    Опорожнение Windows temp folder – хорошая идея?

    Как я могу рассматривать предупреждение MSB3245 (не может разрешить ссылку) как ошибку?

    Выражения EL, не оцененные в JSP

    Не удается найти один или несколько компонентов. Переустановите приложение

    Изменяет ли атрибут привязки WPF маркер к streamу пользовательского интерфейса?

    запустить приложение sms с намерением

    FusedLocationApi.getLastLocation всегда null

    Пакет языковых аксессуаров для Office 2016 не устанавливается на 64-разрядном Office

    Как добавить меню Windows 7 в Grub?

    Давайте будем гением компьютера.