我有一个通用文本,不是PSCustom,不是CSV,不是JSON,但有一些结构
Field1:ABC Field2: DEF Field1:HKA Field3:YZ Field1:123 Field2:234 Field4:876 Field5:XUZ
显然,文本是带有字段和缺少字段的多个记录,每个记录用CR-LF分隔。
是否有一种有效的方法来解析字符串并仅从记录中提取Field1
和Field2
并将结果放入JSON中?
我尝试将字符串放入名为$s
然后
$s | select -ExpandProperty Field1,Field2
但是我收到了这个错误
Select-Object:无法将'System.Object []'转换为参数'ExpandProperty'所需的'System.String'类型。不支持指定的方法。
如果我试过
$s | select -ExpandProperty Field1
然后我收到错误,说Field1
不是财产。
我想我有点理解错误,但不知道如何解决它。我想我必须以某种方式将文本转换为结构化表格然后提取它。但是我该怎么做?
答案 0 :(得分:2)
Select-Object
不会对字符串起作用。您需要首先将字符串处理为对象列表。此外,您不能一次扩展多个属性。
将文本拆分为2个以上的连续换行符:
(Get-Content 'C:\temp\input.txt' | Out-String) -split '(\r?\n){2,}'
将每个片段拆分成行,在分隔符处拆分每一行,并用键/值对填充哈希表:
$ht = @{}
$fragment -split '\r?\n' | ForEach-Object {
$key, $value = $_ -split '\s*:\s*'
$ht[$key] = $value
}
然后从哈希表中构建对象:
New-Object -Type PSObject -Property $ht
您可以选择属性Field1
和Field2
,如下所示:
... | Select-Object Field1, Field2