2016-09-30 2 views
0

チケットシステムのAPIにPowerShell Invoke-RestMethodを使用し、出力をPowerShellオブジェクトに変換しようとしています。Invoke-RestMethodの出力をオブジェクトに変換する

例として、Invoke-RestMethodを使用してチケットのプロパティを取得すると、これが表示されます。私が行うことができるようにしたいと思い何

$object = Invoke-RestMethod '[URI here]' 
$object.GetType() 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  String         System.Object 


$object 

EWREST_supported_user0='Yes'; 
EWREST_updater_team='Support Team'; 
EWREST_eng_id='CLT'; 
EWREST_testlabelsub='Test Label'; 
EWREST_time_created='17:21:03'; 
EWREST_cr_conversion_related_to='Support Case'; 
EWREST__1901_full_name='secuser Testuser1'; 
EWREST_summary='Ticket Title'; 
EWREST_i_would_like_to_reopen_my_ticket='No'; 
EWREST_assigned_team_leader='Agiloft Admin'; 
EWREST_id='183255'; 
EWREST_severity='Sev 4'; 
EWREST_problem_description='<div>This is an example of a ticket note that takes up multiple lines when read via API<\/div><div>&nbsp;<\/div><div>Example note info here<\/div><div>&nbsp;<\/div> 
<div>Additional example note info here<\/div><div>&nbsp;<\/div><div>Even more note info here<\/div>'; 
EWREST_demo_data='No'; 

$object.EWREST_categoryのようなものを行うことによって、オブジェクトとして$objectを操作し、「ネットワーク」を取得することです。ですから、私はどのようにをマニピュレートするかを理解しようとしています。これは、プロパティを持つ伝統的なPowerShellオブジェクトの属性の文字列です。

誰かがそれについてどのように指摘することができますか?

答えて

1

あなたはすでに私はちょうどそのからカスタムオブジェクトを構築し、ハッシュテーブルに文字列を変換し、(単一引用符やセミコロンを削除します)少しクリーンアップを行うだろうと、キー/値ペアの文字列を持っているので、 :

$response = Invoke-RestMethod '[URI here]' 

$props = $response -replace "'" -replace ';' | ConvertFrom-StringData 
$object = New-Object -Type PSObject -Property $props 

編集:あなたはそれらが続く単一引用符が先行していない場合にのみ、改行を削除し、負の後読みアサーション((?<!...))と別の交換を使用することができます1行に複数行の値をマングルするにはセミコロン。しかし、同じプロパティーには他のセミコロンも含まれているため、セミコロンの置換を変更する必要があります。改行や改行(正の先読みアサーションを使用して、(?=...))が続く場合にのみセミコロンを削除します。

$props = $response -replace "(?<!';)`n" -replace "'" -replace ";(?=`n|`$)" | 
      ConvertFrom-StringData 
+0

これは私にとってはうまくいくようです。私は1つの問題がありますが、プロパティの1つは複数行のプロパティです。そして、それはConvertFrom-StringDataコマンドを破るようです。つまり、最初の新しい行に "Data Line new line at line:3 char 44は名前=値形式ではありません"と思っています。 – floyd

+0

実際のデータの外観によって異なります。あなたの質問の例を更新してください。 –

+0

複数の行であるConvertFrom-StringDataコマンドで問題が発生するプロパティEWREST_problem_descriptionを含めるように、私のquesitonの例を更新しました。このプロパティの2行目に到達すると、それはname = value形式とは見えません。 – floyd

1

多分、次のナイーブなスクリプトで十分でしょうか?

$ob= "EWREST_supported_user0='Yes'; 
EWREST_category='Networking'; 
EWREST_updater_team='Admin Team'; 
EWREST_time_created='12:56:53'; 
EWREST_cr_conversion_related_to='Support Case'; 
"           # this is that string 

     # transform string to an array: 
$oba = $ob.Split("`r`n", [System.StringSplitOptions]::RemoveEmptyEntries) 

[email protected]{}         # create empty hash table 
              # and fill it from array then: 
$oba | ForEach-Object { 
     $aux=$_.split('=;')    #  key/value pair 
     $obah[$aux[0]] = $aux[1] }  # hash[key] = value 

$obah.Keys     # display hash table keys (only debug) 
$obah.EWREST_time_created # hash table item use (example: property) 
$obah['EWREST_category']  # hash table item use (another approach: index) 
関連する問題