Powershell script to iterate through all the sites in SharePoint Farm

PowerShell script to iterate through all the sites in the SharePoint farm and write the output to XML file,

Script:
  1. $LogTime = Get-Date -Format yyyy-MM-dd_hh-mm  
  2. $LogFile = ".\SiteDetailsInXMLFormatPatch-$LogTime.rtf"  
  3.  
  4. # Add SharePoint PowerShell Snapin  
  5.   
  6.   
  7. if ( (Get-PSSnapin -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null ) {  
  8.     Add-PSSnapin Microsoft.SharePoint.Powershell  
  9. }  
  10.   
  11. $scriptBase = split-path $SCRIPT:MyInvocation.MyCommand.Path -parent  
  12. Set-Location $scriptBase  
  13.  
  14.  
  15. #Deleting any .rtf files in the scriptbase location  
  16. $FindRTFFile = Get-ChildItem $scriptBase\*.* -include *.rtf  
  17. if($FindRTFFile)  
  18. {  
  19.  foreach($file in $FindRTFFile)  
  20.   {  
  21.    remove-item $file  
  22.   }  
  23. }  
  24.   
  25.   
  26. start-transcript $logfile  
  27.   
  28. $SiteCollection = get-spsite -limit all  
  29. # Set the File Name  
  30. $filePath = $scriptbase + "\" + "SiteDetails.xml"  
  31.   
  32. # Create The Document  
  33. $XmlWriter = New-Object System.XMl.XmlTextWriter($filePath,$Null)  
  34.   
  35. # Write the XML Decleration  
  36. $xmlWriter.WriteStartDocument()  
  37.  
  38. # Write Root Element  
  39. $xmlWriter.WriteStartElement("SiteCollectionDetails") #Opening site collection details  
  40.   
  41. foreach($site in $siteCollection)  
  42. {  
  43.  write-host "Collecting information for the site collection " $site.url -fore magenta  
  44.  $xmlWriter.WriteStartElement("SiteCollection") #Opening SiteCollection URL  
  45.  $xmlWriter.WriteAttributeString("URL", $Site.url)  
  46.  $xmlWriter.WriteAttributeString("SubSiteCount", $Site.allwebs.count)  
  47.    
  48.  foreach($web in $site.allwebs)  
  49.  {  
  50.   write-host "collecting information for the web " $web.url -fore blue  
  51.   $xmlWriter.WriteStartElement("Webs") #Opening Webs  
  52.   $xmlWriter.WriteAttributeString("URL", $web.url)  
  53.   $xmlWriter.WriteAttributeString("ListCount", $web.lists.count)  
  54.   foreach($list in $web.lists)  
  55.   {  
  56.    write-host "Collecting information for the list " $list.title -fore yellow  
  57.    $xmlWriter.WriteStartElement("List") #Opening List  
  58.    $xmlWriter.WriteAttributeString("Title", $List.Title)  
  59.    $xmlWriter.WriteAttributeString("ItemCount", $list.items.count)  
  60.    foreach($item in $list.items)  
  61.    {  
  62.     write-host "Processing item " $item.id -fore cyan  
  63.     $xmlWriter.WriteStartElement("Item") #Opening Item  
  64.     $xmlWriter.WriteAttributeString("ID", $Item.ID)  
  65.     $xmlWriter.WriteAttributeString("VersionCount", $Item.versions.count)  
  66.     $xmlWriter.WriteEndElement() #Closing Item  
  67.    }  
  68.   
  69.    $xmlWriter.WriteEndElement() #Closing List  
  70.   
  71.   }  
  72.   
  73.   $xmlWriter.WriteEndElement() #closing Webs  
  74.  }  
  75.   
  76.  $xmlWriter.WriteEndElement() #Closing SiteCollection URL  
  77. }  
  78.   
  79. $xmlWriter.WriteEndElement() #closing site collection details  
  80.  
  81.  
  82. # End the XML Document  
  83. $xmlWriter.WriteEndDocument()  
  84.   
  85. # Finish The Document  
  86. $xmlWriter.Finalize  
  87. $xmlWriter.Flush  
  88. $xmlWriter.Close()  
  89.   
  90. write-host "SCRIPT COMPLETED" -fore green  
  91. stop-transcript