2017-02-15 21 views
0

我一直在解析一個休息API的輸出時遇到問題。 它是一個多行字符串powershell:分離和解析多行字符串

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") 

,但我仍然無法弄清楚如何去了解下一個和解析這個

它不承認策略名稱,水桶,ID作爲單獨的對象

我將它轉換或將其指定爲JSON或xml或使用不僅僅是Convertto-xml或[xml]前綴$ data的東西?

由於

回答

2

實施例:

$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 
    }) 
} 

Select-String輸出MatchInfo對象。從這些你可以提取比賽組。 New-Object根據從每個輸出字符串中提取的匹配輸出一個新對象。

+0

太棒了,非常感謝....我只是添加** | Foreach-object {$ _ -split「,」} **使桶成爲一個數組....你能指向我的正確的方向爲什麼和如何工作? – AdilZ

+1

新增簡要說明。 –