Working with XML files in PowerShell

Let’s say we have an xml configuration file for our PowerShell script and we want to read / update the information in it:

<?xml version="1.0" encoding="utf-8"?>
<Data version="1.0">
  <LastTimeHere>
    <User>MyName</User>
    <Date>20240130150135</Date>
  </LastTimeHere>
  <MyFavouriteRestaurants>
    <Restaurant>
      <Name>Pizza Boy</Name>
      <Tel>123456789</Tel>
      <Address>1234, New York</Address>
    </Restaurant>
    <Restaurant>
      <Name>Bella Italia</Name>
      <Tel>234567891</Tel>
      <Address>2341, London</Address>
    </Restaurant>
    <Restaurant>
      <Name>Amigo</Name>
      <Tel>345678912</Tel>
      <Address>3412, Paris</Address>
    </Restaurant>
  </MyFavouriteRestaurants>
</Data>
XML

And this is the script for reading / updating the contents of the xml file:

$XMLFilePath = "C:\Users\AdminTips\Desktop\myXML.xml"

$xml = [xml](Get-Content -Path $XMLFilePath)


$lastrunby = $xml.Data.LastTimeHere.User
# output:
# MyName


$lastruntime = [datetime]::ParseExact($xml.Data.LastTimeHere.Date, "yyyyMMddHHmmss", $null)
# output:
# Tuesday, January 30, 2024 3:01:35 PM


$myFavRestsName = $xml.Data.MyFavouriteRestaurants.Restaurant.Name
# output:
# Pizza Boy
# Bella Italia
# Amigo


$myFavRestsTel = $xml.Data.MyFavouriteRestaurants.Restaurant.Tel
# output:
# 123456789
# 234567891
# 345678912


$myFavRestsAddress = $xml.Data.MyFavouriteRestaurants.Restaurant.Addr
# output:
# 1234, New York
# 2341, London
# 3412, Paris



#if you need to update a value:

$currentDateTime = (Get-Date).ToString("yyyyMMddHHmmss")

$xml.Data.LastTimeHere.User = "SomeoneElse"

$xml.Data.LastTimeHere.Date = $currentDateTime

$xml.Save($XMLFilePath)
PowerShell

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *