2016-08-04 11 views
1

私は、HPEサーバー上のFIRMWARE CHECKスクリプトからXML出力を取得しています。 各インデックスにFIRMWARE_NAME VALUE = FIRMWARE_VERSION VALUEを定義する配列を作成したいと思います。POWERSHELLを使用してXML値を取得するためのヘルプが必要

Pathが一貫性がなく、サーバーからサーバーへのインデックスが多かれ少なかれある可能性があるので、おそらくループが作成されません。おそらく、PowerShellでもうまくやっていないためです。

デモスクリプトは、以下である:

$xml = [xml]@" 
<HEAD> 
<RIBCL VERSION="2.23"> 
<RESPONSE 
    STATUS="0x0000" 
    MESSAGE='No error' 
    /> 
<GET_EMBEDDED_HEALTH_DATA> 
    <FIRMWARE_INFORMATION> 
      <INDEX_1> 
       <FIRMWARE_NAME VALUE = "iLO"/> 
       <FIRMWARE_VERSION VALUE = "2.40 Dec 02 2015"/> 
      </INDEX_1> 
      <INDEX_2> 
       <FIRMWARE_NAME VALUE = "System ROM"/> 
       <FIRMWARE_VERSION VALUE = "I31 06/01/2015"/> 
      </INDEX_2> 
      <INDEX_3> 
       <FIRMWARE_NAME VALUE = "Redundant System ROM"/> 
       <FIRMWARE_VERSION VALUE = "I31 04/01/2015"/> 
      </INDEX_3> 
      <INDEX_4> 
       <FIRMWARE_NAME VALUE = "Intelligent Provisioning"/> 
       <FIRMWARE_VERSION VALUE = "1.62.31"/> 
      </INDEX_4> 
      <INDEX_5> 
       <FIRMWARE_NAME VALUE = "Intelligent Platform Abstraction Data"/> 
       <FIRMWARE_VERSION VALUE = "1.55"/> 
      </INDEX_5> 
      <INDEX_6> 
       <FIRMWARE_NAME VALUE = "System ROM Bootblock"/> 
       <FIRMWARE_VERSION VALUE = "03/05/2013"/> 
      </INDEX_6> 
      <INDEX_7> 
       <FIRMWARE_NAME VALUE = "Power Management Controller Firmware"/> 
       <FIRMWARE_VERSION VALUE = "3.3"/> 
       <FIRMWARE_FAMILY VALUE = "0Ch"/> 
      </INDEX_7> 
      <INDEX_8> 
       <FIRMWARE_NAME VALUE = "Power Management Controller Firmware Bootloader"/> 
       <FIRMWARE_VERSION VALUE = "2.7"/> 
      </INDEX_8> 
      <INDEX_9> 
       <FIRMWARE_NAME VALUE = "System Programmable Logic Device"/> 
       <FIRMWARE_VERSION VALUE = "Version 0x13"/> 
      </INDEX_9> 
      <INDEX_10> 
       <FIRMWARE_NAME VALUE = "Server Platform Services (SPS) Firmware"/> 
       <FIRMWARE_VERSION VALUE = "2.1.7.E7.4"/> 
      </INDEX_10> 
      <INDEX_11> 
       <FIRMWARE_NAME VALUE = "Smart Array P220i Controller"/> 
       <FIRMWARE_VERSION VALUE = "6.68"/> 
      </INDEX_11> 
      <INDEX_12> 
       <FIRMWARE_NAME VALUE = "HP FlexFabric 10Gb 2-port 554FLB Adapter"/> 
       <FIRMWARE_VERSION VALUE = "10.5.155.0"/> 
      </INDEX_12> 
    </FIRMWARE_INFORMATION> 
</GET_EMBEDDED_HEALTH_DATA> 
</RIBCL> 
</HEAD> 
"@ 

予想される出力:配列

でのiLO = 2.40 2015年12月2日

システムROM = I31 2015年6月1日

冗長システムROM = I31 04/01/2015

インテリジェント・プロビジョニング= 1.62.31

インテリジェントプラットフォーム抽象データ= 1.55

システムROMブートブロック= 41338

パワーマネージメントコントローラファームウェア= 3.3

パワーマネージメントコントローラファームウェアブートローダ= 2.7

システムプログラマブルロジックデバイス=バージョン0x13

サーバープラットフォームサービス(SPS)ファームウェア= 2.1.7.E7.4

SmartアレイP220iコントローラー= 6.68

HPのFlexFabric 10Gbの2ポート554FLBアダプター= 10.5.155.0

+0

質問に答えると、スレッドを閉じる方法がわかりません。管理者は私を助けますか? –

答えて

1

私はMartin Brandlの答えにコメントを追加しようとしましたが、右に見えるようにコードの書式を取得しないでください。あなたは一つのオブジェクトを使用する場合は

$FirmwareVersions = $xml.DocumentElement.RIBCL.GET_EMBEDDED_HEALTH_DATA.FIRMWARE_INFORMATION.ChildNodes | ForEach-Object { 
    [pscustomobject]@{ 
     Name = $_.FIRMWARE_NAME.Value; 
     Version = $_.FIRMWARE_VERSION.Value 
    } 
} 

ご意見に基づいて:あなたは、オブジェクトの形で結果を望んでいた場合、あなたはこのような何かを行うことができ、マーティン・ブランドルの答えに拡大すること

プロパティ名が異なるデバイスで、ファームウェアレベル(CSVにエクスポートされた値)の値を使用して、これを行う方法は次のとおりです。

これを行うための構文がより短いかもしれませんが、これが私にとって最も自然な方法でした。コードは新しいカスタムオブジェクトを作成し、XMLの子ノードを循環して、ファームウェア名とファームウェア値を持つカスタムオブジェクトに新しいプロパティを追加します。

+0

はい、そうです。 '$ FirmwareVersions'を' $ xml ... 'に割り当てることもできます。それを宣言する必要はありません+ +オブジェクトを追加;-) –

+0

良い点。私は答えを簡略化しました。 –

+0

助けてくれてありがとう、私は両方のあなたが提供する様々な組み合わせを試しています、迅速な返信のおかげで。 –

1

することができますちょうどFIRMWARE_INFORMATIONノードののChildNodesを取得し、それらを反復:

$xml.DocumentElement.RIBCL.GET_EMBEDDED_HEALTH_DATA.FIRMWARE_INFORMATION.ChildNodes | 
    ForEach-Object { "{0} = {1}" -f $_.FIRMWARE_NAME.Value, $_.FIRMWARE_VERSION.Value} 

出力:

iLO = 2.40 Dec 02 2015 
System ROM = I31 06/01/2015 
Redundant System ROM = I31 04/01/2015 
Intelligent Provisioning = 1.62.31 
Intelligent Platform Abstraction Data = 1.55 
System ROM Bootblock = 03/05/2013 
Power Management Controller Firmware = 3.3 
Power Management Controller Firmware Bootloader = 2.7 
System Programmable Logic Device = Version 0x13 
Server Platform Services (SPS) Firmware = 2.1.7.E7.4 
Smart Array P220i Controller = 6.68 
HP FlexFabric 10Gb 2-port 554FLB Adapter = 10.5.155.0 

注:これは文字列の配列を作成します。キーの値を取得したいのでハッシュテーブルを取得するには、foreachオブジェクトのコンテンツを採用する必要があります。

+0

助けてくれてありがとう、私は両方のあなたが提供する様々な組み合わせを試しています、迅速な返信のおかげで。 –

関連する問題