Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将纯文本转换为结构化PowerShell对象_Powershell - Fatal编程技术网

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

如何将纯文本转换为结构化PowerShell对象,powershell,Powershell,我有一个通用文本,不是PSCustom,不是CSV,不是JSON,但有一些结构 Field1:ABC Field2: DEF Field1:HKA Field3:YZ Field1:123 Field2:234 Field4:876 Field5:XUZ 但我犯了这个错误 选择对象:无法将“System.Object[]”转换为参数“ExpandProperty”所需的类型“System.String”。不支持指定的方法 如果我试过 $s | select -ExpandProperty F

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

Field1:ABC Field2: DEF Field1:HKA Field3:YZ Field1:123 Field2:234 Field4:876 Field5:XUZ 但我犯了这个错误

选择对象:无法将“System.Object[]”转换为参数“ExpandProperty”所需的类型“System.String”。不支持指定的方法

如果我试过

$s | select -ExpandProperty Field1
然后我得到一个错误,说
Field1
不是一个属性


我想我有点理解这个错误,但不知道如何修复它。我想我必须先把文本转换成一个结构化的表格,然后再提取出来。但是我该怎么做呢?

选择对象
对字符串不起作用。首先需要将字符串处理为对象列表。此外,一次不能扩展多个属性

在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

选择对象
对字符串无效。首先需要将字符串处理为对象列表。此外,一次不能扩展多个属性

在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

您正在尝试展开字符串上的“属性”。这行不通。您必须创建一个PSCustom对象并将值放置到该对象中,然后才能在管道中使用它并以这种方式展开特性。我能想到的解决方案是将新行上的字符串拆分为一个数组,并在该数组上使用foreach循环来创建自定义对象。我还注意到您有多表field1和2等等……您给出的示例正确吗?@ArcSet:是的,正确。“纯文本”实际上不是纯文本,而是结构化文本。它们是字段1、字段2、…、字段n的记录。有些字段显示是因为它们有值,有些字段没有值,因为它们是空的。但我只对特定领域感兴趣,比如说field1和field2。如果它们为空,那么我会在值中留下空格。您正在尝试展开字符串上的“属性”。这行不通。您必须创建一个PSCustom对象并将值放置到该对象中,然后才能在管道中使用它并以这种方式展开特性。我能想到的解决方案是将新行上的字符串拆分为一个数组,并在该数组上使用foreach循环来创建自定义对象。我还注意到您有多表field1和2等等……您给出的示例正确吗?@ArcSet:是的,正确。“纯文本”实际上不是纯文本,而是结构化文本。它们是字段1、字段2、…、字段n的记录。有些字段显示是因为它们有值,有些字段没有值,因为它们是空的。但我只对特定领域感兴趣,比如说field1和field2。如果它们是空的,那么我会在值中留下空格。谢谢!那很滑。。。但是,由于某些原因,在运行脚本后,所有记录中的字段都只合并到一个记录中。。。所以$ht是唯一一个字段1到字段5的记录,而我正在查找的是$ht[0]={Field1:…,Field2},$ht[1]={Field1…,Field3],$ht[3]={…}…我可能需要稍微修改一下你的代码以得到我想要的,但至少我知道了应该做什么的要点!很可能你没有为每个片段创建一个新的哈希表啊…可能就是这样!我是新成员,仍然在学习我的rope谢谢!这非常流畅…但是,出于某种原因,在运行脚本之后,所有字段都重新创建了跳线只合并到一条记录中…所以$ht是只有一条字段1到字段5的记录,而我正在查找的是$ht[0]={Field1:…,Field2},$ht[1]={Field1…,Field3],$ht[3]={…}…我可能需要稍微修改一下你的代码才能得到我想要的,但至少我知道了应该做什么的要点!很可能你没有为每个片段创建新的哈希表啊…可能就是这样!我是新手,还在学习我的诀窍