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>XMLAnd 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
