Hello.
I am trying to retrieve storage metrics from an HPE MSA array using a PS script. I’m using PS to launch a plink -ssh command to retrieve the information. The problem is that MSA returns the values in .xml format.
The .xml is large, here is an excerpt with the values I’m interested in:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RESPONSE VERSION="L100" REQUEST="show pools">
<COMP G="0" P="1"/> <OBJECT basetype="pools" name="pools" oid="1" format="rows">
<PROPERTY name="name" type="string" size="32" draw="true" sort="string" display-name="Name">A</PROPERTY>
<PROPERTY name="total-size" units="GB" type="string" size="9" draw="true" sort="size" display-name="Total Size">5590.0GB</PROPERTY>
<PROPERTY name="total-avail" units="GB" type="string" size="9" draw="true" sort="size" display-name="Avail">4098.4GB</PROPERTY>
<PROPERTY name="name" type="string" size="32" draw="true" sort="string" display-name="Name">B</PROPERTY>
<PROPERTY name="total-size" units="GB" type="string" size="9" draw="true" sort="size" display-name="Total Size">5590.0GB</PROPERTY>
<PROPERTY name="total-avail" units="GB" type="string" size="9" draw="true" sort="size" display-name="Avail">2689.8GB</PROPERTY>
</OBJECT>
</RESPONSE>
Basically, I need the pool name (A), the total size (5590.0GB) and Avail (4098.4GB) for each pool. In this case, there are only two pools, but other arrays may contain more.
I would like to convert these values to a text file, for example:
Pool Name: A
Pool Size: 5590.0
Available: 4098.4
Pool Name: B
Pool Size: 5590.0
Available: 2689.8
I came across the ConvertTo-Xml but there doesn’t seem to be a ConvertFrom-Xml available.
I also found this example, but throws an error:
function ConvertFrom-Xml($XML) {
foreach ($Object in @($XML.Objects.Object)) {
$Object
$PSObject = New-Object PSObject
foreach ($Property in @($Object.Property)) {
$PSObject | Add-Member NoteProperty $Property.Name $Property.InnerText
}
$PSObject
}
}
[xml]$XMLDocument = Get-Content -Path C:\temp\Test.xml
ConvertFrom-Xml $XMLDocument
Add-Member : Cannot bind argument to parameter 'Name' because it is null.
At C:\Temp\Test.ps1:8 char:49
+ $PSObject | Add-Member NoteProperty $Property.Name $Proper ...
+ ~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Add-Member], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Command
s.AddMemberCommand
Any help or suggestions greatly appreciated.
Thank you.