Большинство сценаристов PowerShell, вероятно, сказали бы, что это плохая идея использовать любые текстовые таблицы, подобные выводу Format-Table
, в качестве входных данных, но мне нравится оспаривать это, потому что отформатированные исходные таблицы могут быть прочитаны людьми, и если люди могут читать их и определить, например, компоновка относительно того, где столбец начинается и заканчивается, программа должна быть в состоянии сделать то же самое ...
В некоторых случаях (например, для примеров данных на сайте StackOverflow ) это может быть даже удобнее, чем другие форматы, такие как CSV
(, которые трудно читать и поддерживают только строковые данные ), XML
(, что очень многословно и поэтому также трудно читать ) или JSON
(или PSON
, , что лучше для сложных данных но не для списка объектов, которые содержат простые собственные свойства )
Исходя из этой мысли, я написал многоразовый ConvertFrom-SourceTable
командлет , который доступен для загрузки в галерее PowerShell, и исходный код GitHub iRon7/ConvertFrom-SourceTable
хранилище.
В вашем случае команда для преобразования таблицы в объект так же проста, как $RS | ConvertFrom-SourceTable
, позвольте мне показать, что:
$RS = '
Mod Ports Module-Type Model Status
--- ----- ---------------------------------- ------------------ -----------
1 48 2/4/8/10/16 Gbps Advance FC Module DS-X9448-768K9 ok
2 48 2/4/8/10/16 Gbps Advance FC Module DS-X9448-768K9 ok
3 0 Supervisor Module-3 DS-X97-SF1-K9 ha-standby
4 0 Supervisor Module-3 DS-X97-SF1-K9 active *
'
$RS | ConvertFrom-SourceTable
Status : ok
Model : DS-X9448-768K9
Ports : 48
Mod : 1
Module-Type : 2/4/8/10/16 Gbps Advance FC Module
Mod : 2
Module-Type : 2/4/8/10/16 Gbps Advance FC Module
Ports : 48
Model : DS-X9448-768K9
Status : ok
Mod : 3
Module-Type : Supervisor Module-3
Ports : 0
Model : DS-X97-SF1-K9
Status : ha-standby
Mod : 4
Module-Type : Supervisor Module-3
Ports : 0
Model : DS-X97-SF1-K9
Status : active *
И так как все ваши данные выровнены по левому краю (и каждому столбцу понадобится заголовок), расположение столбцов можно определить с самого начала, что означает, что вы можете даже stream этот ввод таблицы (предполагая, что .\Plink
выводит каждую строку отдельно) через конвейер:
.\Plink server@puttysession -pw "password" "command" | ConvertFrom-SourceTable
(То есть, если вы предоставляете исходную таблицу в виде многострочной строки, командлет ConvertFrom-SourceTable
будет определять ведьмы столбцов для всей таблицы, в противном случае он будет основан на заголовке, прошлых и текущих записях)
Если исходные таблицы будут иметь лучшее соглашение о форматировании, например, "нестроковые данные (данные, которые должны быть интерпретированы) выровнены по правому краю" (как на самом деле сделано Format-Table
). Можно предположить (как это сделал @Ansgar Wiechers), что Mod
и Ports
- это целые числа. Например:
$Object = ConvertFrom-SourceTable '
Mod Ports Module-Type Model Status
--- ----- ----------- ----- ------
1 48 2/4/8/10/16 Gbps Advance FC Module DS-X9448-768K9 ok
2 48 2/4/8/10/16 Gbps Advance FC Module DS-X9448-768K9 ok
3 0 Supervisor Module-3 DS-X97-SF1-K9 ha-standby
4 0 Supervisor Module-3 DS-X97-SF1-K9 ha-standby
'
(обратите внимание, что в этом примере $Object | Format-Table
даст тот же вывод, что и вход)
Для дополнительных примеров используйте справку: Help ConvertFrom-SourceTable -Full