看起来你的分隔符是一个空行。如何读取文件并对其进行处理,因此第一行是服务器名称,以下所有行直到空白都是数据数组,然后在空白行上它输出一个自定义对象,其中服务器名称和数据数组作为属性,并创建这些对象的数组?
嗯,这很令人困惑,我写了它。让我贴代码,然后解释一下。
$Server = ""
$Data = @()
$Collection = @()
Switch(GC C:\temp\test.txt){
{[String]::IsNullOrEmpty($Server) -and !([String]::IsNullOrWhiteSpace($_))}{$Server = $_;Continue}
{!([String]::IsNullOrEmpty($Server)) -and !([String]::IsNullOrEmpty($_))}{$Data+=$_;Continue}
{[String]::IsNullOrEmpty($_)}{$Collection+=[PSCustomObject]@{Server=$Server;Data=$Data};Remove-Variable Server; $Data=@()}
}
If(!([String]::IsNullOrEmpty($Server))){$Collection+=[PSCustomObject]@{Server=$Server;Data=$Data};Remove-Variable Server; $Data=@()}
好的,首先将变量定义为空字符串或数组。
然后它处理每一行,并根据情况执行三个操作之一。开关的第一行读取文本文件,并逐行处理它。 Switch中的第一个选项基本上是这样写的:
如果 $Server 变量中没有存储任何内容,并且当前行不为空,则 $Server = Current Line。继续下一行。
第二个选项是:
如果 $Server 不为空,并且当前行不为空,则将此行添加到数组 $Data。继续下一行。
Switch 的最后一个选项是:
如果当前行是空白的,那么这是当前记录的结尾。创建具有两个属性的自定义对象。第一个属性名为 Server,其值为 $Server 中的任何值。第二个属性名为 Data,其值是 $Data 中的任何值。然后删除 $server 变量,并将 $Data 重置为空数组。
在切换之后,它会检查 $Server 是否还有数据,如果有则输出最后一个对象。我这样做是为了以防最后一条记录的末尾没有空行,就像清理一样。
剩下的就是 $Collection 是一个对象数组,看起来像这样:
Server Data
------ ----
[Server1] {Value_A , Value_B , Value_C}
[Server2] {Value_A}
[Server3] {Value_A , Value_B , Value_C , Value_D}