Выходные данные консоли PowerShell v5.1 Select-Object отличаются от v3.0 - PullRequest
0 голосов
/ 28 августа 2018

Я только что обновил PowerShell с версии 3.0 до версии 5.1 и заметил, что выходы консоли Select-Object и Format-Table ведут себя по-разному. Если значение свойства слишком длинное, все последующие свойства полностью исключаются из вывода консоли (я вижу, что все значения по-прежнему передаются - просто подавляются в выводе консоли). Мне нужен простой способ воспроизвести старое поведение 2.0 / 3.0 (4.0?), Где значения усекаются для соответствия всем свойствам консоли, так как намного проще сравнивать данные с первого взгляда, но я не могу понять способ сделать это.

Вот пример: я делаю массив хеш-таблиц, затем пытаюсь просмотреть вывод в консоли шириной 120 символов:

$array = @()
$array += New-Object PSObject -Property @{Name="Test1";Value1="samplestring";Value2="Omitted Text"}
$array += New-Object PSObject -Property @{Name="Test2";Value1="Much longer string. More than 120 characters, so that we can suppress Value2's console output. This sentence ought to do it.";Value2="Omitted Text"}
$array | select Name,Value1,Value2

В PS 2.0 и 3.0 вывод - именно то, что я хочу:

Name                                    Value1                                  Value2
----                                    ------                                  ------
Test1                                   samplestring                            Omitted Text
Test2                                   Much longer string. More than 120 ch... Omitted Text

... но в 5.1, кажется, автоматически применяется Format-Table -AutoSize и дает мне это:

Name  Value1
----  ------
Test1 samplestring
Test2 Much longer string. More than 120 characters, so that we can suppress Value2's console output. This sentence o...

Я пытался поиграться с вычисленными свойствами Format-Table, но я не могу заставить работать свойство width, и, честно говоря, указание ширины каждого свойства - это слишком много работы для команд, которые я печатаю и выполняю на лету. Есть ли какая-то другая команда, которую я пропускаю, или я застрял, сожалея о своем обновлении?

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Я не смог найти решение, чтобы изменить поведение обратно на старые версии, Однако: я смог написать что-то, что может удовлетворить ваши потребности.

$array = @()
$array += New-Object PSObject -Property 
@{Name="Test1";Value1="samplestring";Value2="Omitted Text"}
$array += New-Object PSObject -Property @{Name="Test2";Value1="Much longer string. More than 120 characters, so that we can suppress Value2's console output. This sentence ought to do it.";Value2="Omitted Text"}

$array | Format-table -Property @{ e='name'; width=40 }, `
                                @{ e='value1'; width=40 }, `
                                @{ e='value2'; width=40 }

Кроме того, я решил, что у меня есть два смысла в несвязанном вопросе. Поскольку массивы масштабируются по размеру, оператор + = плохо влияет на производительность, потому что он должен (насколько я понимаю) скопируйте весь массив, а затем добавьте к нему следующий элемент. Если вы работаете с большим набором данных и делаете много добавлений и удалений, я бы рекомендовал использовать список.

0 голосов
/ 28 августа 2018

Кажется, у меня нормально работает на V5.1

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...