Replace text in xml files with Powershell
Yesterday I was working at client site. It is a Windows server isolated from external network. It is not allowed to install any third party software in the machine.
Powershell Script
However, I got a task in hand to replace all xml files name from “My Report” to “My Report (New)”. The original file temp.xml looks like this:
<ReportList>
<Report Name="My Report">
</Report>
</ReportList>
while the excepted output temp-new.xml file I want for import looks in a structure like this:
<ReportList>
<Report Name="My Report (New)">
</Report>
</ReportList>
I have no tools in hand and it would takes many hours to replace hundreds of files one by one manually. The only thing accessible for scripting is the PowerShell. Here are a few lines of code to get things done.
Step 1: Load all xml files inside my **Test **folder.
$files = Get-Childitem C:UsersvictorleungtwDesktopTest -Recurse -Include *.xml
Step 2: Modify all report name and add “ (New)” after the original name
$xmldata = [xml](Get-Content $file);
$name = $xmldata.ReportList.Report.GetAttribute("Name");
$name = $name + " (New)"; $xmldata.ReportList.Report.SetAttribute("Name", $name);
$xmldata.Save($file)
}
Step 3: Change the file name from temp.xml **to **temp-new.xml
Get-ChildItem *.xml | Rename-Item -NewName { $_.name -Replace '.xml$','-new.xml' }
Done! All the files are changed. Happy coding :)

About
Experience in software development, application architecture, and deploying cloud solutions for enterprise customers. Strong hands-on skills with a Master's degree in Computer Science and business acumen with a master of business administration (MBA) in Finance. Certified in Amazon Web Services (AWS), Google Cloud Platform (GCP), Microsoft Azure, Kubernetes (CKA, CKAD, CKS, KCNA) and Scrum (PSM, PSPO) with experience in building banking products from scratch.