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


Sathish Nadarajan
SharePoint MVP
Published On :   11 May 2016
Visit Count
Today :  17    Total :   7126
Plan, Migrate, Secure, Report
SharePoint & Office 365 Tool. Simple & Easy to Use. 15-Day Trial!

SharePoint Office 365 Tool
Simple & Powerful Tool for Migration, Security & Reporting. Free Trial


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:\Sathish\Article\Sample.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.

SharePoint Usage Reports
Usage reports, collaboration and audit for SharePoint.
Categories

KWizCom Scan