如何将纯文本转换为结构化PowerShell对象

时间:2017-09-15 14:04:57

标签: powershell

我有一个通用文本,不是PSCustom,不是CSV,不是JSON,但有一些结构

Field1:ABC
Field2: DEF

Field1:HKA
Field3:YZ

Field1:123
Field2:234
Field4:876
Field5:XUZ

显然,文本是带有字段和缺少字段的多个记录,每个记录用CR-LF分隔。

是否有一种有效的方法来解析字符串并仅从记录中提取Field1Field2并将结果放入JSON中?

我尝试将字符串放入名为$s然后

的字符串变量中
$s | select -ExpandProperty Field1,Field2

但是我收到了这个错误

  

Select-Object:无法将'System.Object []'转换为参数'ExpandProperty'所需的'System.String'类型。不支持指定的方法。

如果我试过

$s | select -ExpandProperty Field1

然后我收到错误,说Field1不是财产。

我想我有点理解错误,但不知道如何解决它。我想我必须以某种方式将文本转换为结构化表格然后提取它。但是我该怎么做?

1 个答案:

答案 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

您可以选择属性Field1Field2,如下所示:

... | Select-Object Field1, Field2