I have this XML document in a text file:
<?xml version="1.0"?>
<Objects>
<Object Type="System.Management.Automation.PSCustomObject">
<Property Name="DisplayName" Type="System.String">SQL Server (MSSQLSERVER)</Property>
<Property Name="ServiceState" Type="Microsoft.SqlServer.Management.Smo.Wmi.ServiceState">Running</Property>
</Object>
<Object Type="System.Management.Automation.PSCustomObject">
<Property Name="DisplayName" Type="System.String">SQL Server Agent (MSSQLSERVER)</Property>
<Property Name="ServiceState" Type="Microsoft.SqlServer.Management.Smo.Wmi.ServiceState">Stopped</Property>
</Object>
</Objects>
I want to iterate through each object and find the DisplayName
and ServiceState
. How would I do that? I've tried all kinds of combinations and am struggling to work it out.
I'm doing this to get the XML into a variable:
[xml]$priorServiceStates = Get-Content $serviceStatePath;
where $serviceStatePath
is the xml file name shown above. I then thought I could do something like:
foreach ($obj in $priorServiceStates.Objects.Object)
{
if($obj.ServiceState -eq "Running")
{
$obj.DisplayName;
}
}
And in this example I would want a string outputted with SQL Server (MSSQLSERVER)