How to Create XML Files as Output of PowerShell Execution – SharePoint 2013

Sathish Nadarajan
 
Solution Architect
May 11, 2016
 
Rate this article
 
Views
31066

Recently, I came up with a requirement of creating a XML file as output of PowerShell Execution. The PowerShell will gather some information from the SharePoint Farm and it needs to generate an XML file with the gathered information.

The required output is something like,

 <?xml version="1.0"?>
 <!--Get the Information about the web application-->
 <WebApplication>
   <SiteCollections>
     <SiteCollection Name="SiteCollectionTitle">
       <SubSites Count="45">
         <SubSite Title="Web title">
           <Lists>
             <List Title="ListTitle">
               <RootFolder>Root folder Title</RootFolder>
             </List>
           </Lists>
         </SubSite>
       </SubSites>
     </SiteCollection>
   </SiteCollections>
 </WebApplication>	
 

The script to create the above file is as follows,

Let us create the XML File first. To do that,

 # Assign the CSV and XML Output File Paths
     $XML_Path = "D:SathishArticleSample.xml"
     
     # Create the XML File Tags
     $xmlWriter = New-Object System.XMl.XmlTextWriter($XML_Path,$Null)
     $xmlWriter.Formatting = 'Indented'
     $xmlWriter.Indentation = 1
     $XmlWriter.IndentChar = "`t"
     $xmlWriter.WriteStartDocument()
     $xmlWriter.WriteComment('Get the Information about the web application')
     $xmlWriter.WriteStartElement('WebApplication')
     $xmlWriter.WriteEndElement()
     $xmlWriter.WriteEndDocument()
     $xmlWriter.Flush()
     $xmlWriter.Close()
     
     
     # Create the Initial  Node
     $xmlDoc = [System.Xml.XmlDocument](Get-Content $XML_Path);
     $siteCollectionNode = $xmlDoc.CreateElement("SiteCollections")
     $xmlDoc.SelectSingleNode("//WebApplication").AppendChild($siteCollectionNode)
     $xmlDoc.Save($XML_Path)
     
     $xmlDoc = [System.Xml.XmlDocument](Get-Content $XML_Path);
     $siteCollectionNode = $xmlDoc.CreateElement("SiteCollection")
     $xmlDoc.SelectSingleNode("//WebApplication/SiteCollections").AppendChild($siteCollectionNode)
     $siteCollectionNode.SetAttribute("Name", "SiteCollectionTitle")
     
     
     $subSitesNode = $siteCollectionNode.AppendChild($xmlDoc.CreateElement("SubSites"));
     $subSitesNode.SetAttribute("Count", "45")
     $xmlDoc.Save($XML_Path)
     
     $subSiteNameNode = $subSitesNode.AppendChild($xmlDoc.CreateElement("SubSite"));
     $subSiteNameNode.SetAttribute("Title", "Web title")
     
     $ListsElement = $subSiteNameNode.AppendChild($xmlDoc.CreateElement("Lists"));
     $ListElement = $ListsElement.AppendChild($xmlDoc.CreateElement("List"));
     $ListElement.SetAttribute("Title", "ListTitle")
     
     $RootFolderElement = $ListElement.AppendChild($xmlDoc.CreateElement("RootFolder"));
     $RootFolderTextNode = $RootFolderElement.AppendChild($xmlDoc.CreateTextNode("Root folder Title"));
     
     $xmlDoc.Save($XML_Path)
 

The Script seems to be very simple. It covers how to create the child element, how to set the attributes, etc.,

Happy Coding,

Sathish Nadarajan.

Author Info

Sathish Nadarajan
 
Solution Architect
 
Rate this article
 
Sathish is a Microsoft MVP for SharePoint (Office Servers and Services) having 15+ years of experience in Microsoft Technologies. He holds a Masters Degree in Computer Aided Design and Business ...read more
 

Leave a comment