Solved

Powershell Select from xml

Posted on 2013-06-22
4
235 Views
Last Modified: 2013-08-31
I need to be able to select from an xml based on a value then parse for specific child nodes in that parent and perform specific functions:

Here is the xml snippet:
<ServerList>
  <Server Name="SERVER01">
    <IP Address="192.16.1.1" Status="In Service" Virtual="8.8.8.55" />
    <IP Address="192.16.1.2" Status="In Service" Virtual="8.8.8.66" />
    <IP Address="192.16.1.3" Status="In Service" Virtual="8.8.8.77" />
  </Server>

  <Server Name="SERVER02">
    <IP Address="192.16.1.19" Status="In Service" Virtual="8.8.8.55" />
    <IP Address="192.16.1.14" Status="In Service" Virtual="8.8.8.66" />
    <IP Address="192.16.1.17" Status="In Service" Virtual="8.8.8.77" />
  </Server>

  <Server Name="SERVER03">
    <IP Address="192.16.1.44" Status="In Service" Virtual="8.8.8.55" />
    <IP Address="192.16.1.48" Status="In Service" Virtual="8.8.8.66" />
    <IP Address="192.16.1.56" Status="In Service" Virtual="8.8.8.77" />
  </Server>

  <Server Name="SERVER04">
    <IP Address="192.16.1.78" Status="In Service" Virtual="8.8.8.55" />
    <IP Address="192.16.1.68" Status="In Service" Virtual="8.8.8.66" />
    <IP Address="192.16.1.97" Status="In Service" Virtual="8.8.8.77" />
  </Server>
</ServerList>

Open in new window


Now I do not have any control over the xml formatting so unless someone is willing to do the heavy lifting to change the xml that is all I have to work with.

I want to be able to do something similar to below:
Select * from xml where server = "server01"

Then I want to query for all the virtuals for that machine then do a foreach loop:
e.g

foreach ($virtual in$virtuals)

{ do something}


Let me know if anyone thinks they can help :)
0
Comment
Question by:becraig
  • 3
4 Comments
 
LVL 29

Author Comment

by:becraig
ID: 39268437
Ok I got this figured out, thanks a lot guys
0
 
LVL 8

Expert Comment

by:dicconb
ID: 39407680
Good news :)

Would you consider posting the solution so other people can benefit from it?

D
0
 
LVL 29

Accepted Solution

by:
becraig earned 0 total points
ID: 39440340
Sure thing:
$var = Select-Xml -Path "path-to-file.xml" -XPath "/ServerList/Server/IP" | where { $_.Node.ParentNode.Name -eq "servername"} | % {$_.Node.Virtual} | select -unique 

Open in new window

0
 
LVL 29

Author Closing Comment

by:becraig
ID: 39454739
The key was in using _.Node.ParentNode to specify the parent node of the node I was specifying in my query.
0

Featured Post

NAS Cloud Backup Strategies

This article explains backup scenarios when using network storage. We review the so-called “3-2-1 strategy” and summarize the methods you can use to send NAS data to the cloud

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The Nano Server Image Builder helps you create a custom Nano Server image and bootable USB media with the aid of a graphical interface. Based on the inputs you provide, it generates images for deployment and creates reusable PowerShell scripts that …
A project that enables an administrator to perform actions within a user session context not just at the time of login but any time later on day(s) or week(s) later.
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…

830 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question