Regex 有没有办法将文本表转换为PowerShell对象
有许多工具以表格格式输出数据。diskpart就是这样一个例子。去掉一些无关的输出,你会得到这样的结果Regex 有没有办法将文本表转换为PowerShell对象,regex,powershell,text-parsing,Regex,Powershell,Text Parsing,有许多工具以表格格式输出数据。diskpart就是这样一个例子。去掉一些无关的输出,你会得到这样的结果 Disk ### Status Size Free Dyn Gpt -------- ------------- ------- ------- --- --- Disk 0 Online 136 GB 0 B Disk 1 Offline 136 GB 136 GB Disk 2
Disk ### Status Size Free Dyn Gpt
-------- ------------- ------- ------- --- ---
Disk 0 Online 136 GB 0 B
Disk 1 Offline 136 GB 136 GB
Disk 2 Reserved 1027 MB 0 B *
Disk 3 Reserved 500 GB 0 B *
Disk 4 Reserved 500 GB 0 B *
Disk 5 Reserved 10 GB 0 B *
Disk 6 Reserved 13 GB 0 B *
Disk 7 Reserved 4102 MB 0 B *
Disk 8 Reserved 7169 MB 0 B *
Disk 9 Reserved 503 GB 0 B *
Disk 10 Reserved 506 GB 0 B *
Disk 11 Reserved 500 GB 0 B *
Disk 12 Reserved 3891 GB 0 B *
Disk 13 Reserved 500 GB 0 B *
Disk 14 Reserved 3891 GB 0 B *
Disk 15 Reserved 1843 GB 0 B
Disk 16 Reserved 3072 GB 0 B *
Disk 17 Reserved 2048 GB 0 B *
Disk 18 Reserved 808 GB 0 B *
Disk 19 Reserved 805 GB 0 B *
Disk 20 Reserved 3891 GB 0 B *
Disk 21 Reserved 3891 GB 0 B *
Disk 22 Reserved 3891 GB 0 B *
Disk 23 Reserved 6144 GB 0 B *
另一个例子是netstat,如下所示:
Proto Local Address Foreign Address State
TCP 0.0.0.0:80 7ANDYS:0 LISTENING
TCP 0.0.0.0:135 7ANDYS:0 LISTENING
TCP 0.0.0.0:443 7ANDYS:0 LISTENING
TCP 0.0.0.0:445 7ANDYS:0 LISTENING
TCP 0.0.0.0:1025 7ANDYS:0 LISTENING
TCP 0.0.0.0:1026 7ANDYS:0 LISTENING
TCP 0.0.0.0:1027 7ANDYS:0 LISTENING
TCP 0.0.0.0:1028 7ANDYS:0 LISTENING
TCP 0.0.0.0:1029 7ANDYS:0 LISTENING
TCP 0.0.0.0:2048 7ANDYS:0 LISTENING
我试图找出是否有一种相当可重复的方法将此类数据转换为对象,这样对象的属性就是第一行的标题。我知道对于使用regex的单个工具的输出,有很多方法可以做到这一点,但我正在寻找更多关于如何解决这一问题的策略,而不仅仅是针对diskpart或netstat的一次性解决方案
我想知道如何在Poshcode上使用Lee Holmes的脚本,但不太确定从哪里开始 从战略角度来看,我会尝试将您的文本文件转换为正确的CSV(coma分隔值)文件,然后使用
导入CSV
您看到了吗:
这可能就是你要找的东西。我昨天做的:)。您可以使用out datatable
将数据转换为系统。datatable
。把它弄到手
有关更多详细信息,请参阅我最近的。netstat示例:
get-content netstat.txt | select -skip 1 |
ConvertFrom-String -propertynames blank,proto,local,foreign,state |
select * -ExcludeProperty blank
proto local foreign state
----- ----- ------- -----
TCP 0.0.0.0:80 7ANDYS:0 LISTENING
TCP 0.0.0.0:135 7ANDYS:0 LISTENING
TCP 0.0.0.0:443 7ANDYS:0 LISTENING
使用此cmdlet:
$DiskPart | ConvertFrom-SourceTable -Literal | Format-Table
Disk ### Status Size Free Dyn Gpt
-------- ------ ---- ---- --- ---
Disk 0 Online 136 GB 0 B
Disk 1 Offline 136 GB 136 GB
Disk 2 Reserved 1027 MB 0 B *
Disk 3 Reserved 500 GB 0 B *
Disk 4 Reserved 500 GB 0 B *
...
$NetStat | ConvertFrom-SourceTable -Literal | Format-Table
Proto Local Address Foreign Address State
----- ------------- --------------- -----
TCP 0.0.0.0:80 7ANDYS:0 LISTENING
TCP 0.0.0.0:135 7ANDYS:0 LISTENING
TCP 0.0.0.0:443 7ANDYS:0 LISTENING
TCP 0.0.0.0:445 7ANDYS:0 LISTENING
...
(这也意味着您还可以对上述显示结果执行一次完整的往返)首先是对代码进行概括,以处理项目列表。链接中的代码可用于生成每个对象(例如,每行运行一次,不包括标题)。然后,它只是从标题行提取“格式”。优化可以稍后进行。这应该是一个有趣的小项目。