powershell:分离并解析多行字符串

Adi*_*ilZ 1 powershell parsing split

我在解析 REST API 的输出时遇到了麻烦。它是一个多行字符串

Policy Name: Default_US_MultiSite Id: abc1234abc123 Buckets: support_us1_multisite,ch1ny2
Policy Name: Default_CH Id: 123456789acdef Buckets: question,answer,ch2,ch1,drive.me.closer
Policy Name: Default_NY Id: qrstuvwxyz9876 Buckets: demo,bucket1,test1,test,ny0,nyhello,goodbye,new.shoes,pizza,cutecats,theinternetisfor,Halloween,For-the-emperor
Run Code Online (Sandbox Code Playgroud)

现在我确实知道如何按行分割它,我尝试使用以下代码

$data.Split("`n")
Run Code Online (Sandbox Code Playgroud)

但我仍然不知道下一步如何解析这个

它不将策略名称、存储桶、ID 识别为单独的对象

我是否将其转换为 json 或 xml 或将其分配为 json 或 xml 或使用不仅仅是 Convertto-xml 或 [xml] 前缀 $data 的东西?

谢谢

Bil*_*art 5

例子:

$data = @"
Policy Name: Default_US_MultiSite Id: abc1234abc123 Buckets: support_us1_multisite,ch1ny2
Policy Name: Default_CH Id: 123456789acdef Buckets: question,answer,ch2,ch1,drive.me.closer
Policy Name: Default_NY Id: qrstuvwxyz9876 Buckets: demo,bucket1,test1,test,ny0,nyhello,goodbye,new.shoes,pizza,cutecats,theinternetisfor,Halloween,For-the-emperor
"@

$data -split "`n" |
  Select-String 'Policy Name: (\w+) Id: (\w+) Buckets: (.+)' |
  ForEach-Object {
  New-Object PSObject -Property ([Ordered] @{
    "PolicyName" = $_.Matches[0].Groups[1].Value
    "Id"         = $_.Matches[0].Groups[2].Value
    "Buckets"    = $_.Matches[0].Groups[3].Value
  })
}
Run Code Online (Sandbox Code Playgroud)

Select-String输出MatchInfo对象。您可以从中提取匹配组。New-Object根据从每个输出字符串中提取的匹配项输出一个新对象。