Thursday, 13 December 2018

Power Shell Script to Export all existing sitecollection URLs and its site's URL in a SharePoint Online tenant to XML file

try
{
    Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.SharePoint.Client.dll"
    Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.SharePoint.Client.Runtime.dll"
    Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll"
}
catch
{
    Write-Host "Problem in loading CSOM DLLs : $_.Exception.Message" -foregroundcolor black -backgroundcolor Red
    return
}

# Initialize client context
$adminURL = Read-Host -Prompt "Enter Tenant Admin URL:"
$username = Read-Host -Prompt "Enter user name:"
$password = Read-Host -Prompt "Enter password:" -AsSecureString
#$sideLoadingGuid = new-object System.Guid "AE3A1339-61F5-4f8f-81A7-ABD2DA956A7D"


try{
        function Get-SPOWebs($webURL){
            #Get Web information and subsites
            $clientContext = New-Object Microsoft.SharePoint.Client.ClientContext($webURL)
            $clientContext.Credentials = $credentials
            $Web = $clientContext.Web
            $clientContext.Load($Web)
            $clientContext.Load($Web.Webs)  
            $clientContext.executeQuery()
 
            #Do something with the current sub-site
            #Write-host $Web.URL
 
            #Iterate through each subsite in the current web
            foreach ($Subweb in $Web.Webs)
            {
                if($Subweb.AppInstanceId -eq [GUID]::Empty){
                
                    Write-Host 'Url:' $Subweb.url
                    # Append as child to an existing node
                    [System.XML.XMLElement]$newXmlSiteURLElement=$oXMLRoot.appendChild($xmlDoc.CreateElement("SiteURL"))
                    $newXmlNameTextNode = $newXmlSiteURLElement.AppendChild($xmlDoc.CreateTextNode($Subweb.url));                    
           

                    #Call the function recursively to process all subsites underneaththe current web
                    Get-SPOWebs($Subweb.url)
                }
            }
        }
}
catch{
    Write-Host "$_.Exception.Message" -foregroundcolor black -backgroundcolor Red
    return
}

try
{
  # connect/authenticate to SharePoint Online and get ClientContext object.. 
  $clientContext = New-Object Microsoft.SharePoint.Client.ClientContext($adminURL) 
  $credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $password) 
  $clientContext.Credentials = $credentials 
  
  # Enumerate all site collections
  $tenant = New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($clientContext)  
  $props = $tenant.GetSiteProperties(0, $true)
  $clientContext.Load($props)
  $clientContext.ExecuteQuery()
   

        # Create a new XML File with sites root node
        [System.XML.XMLDocument]$xmlDoc=New-Object System.XML.XMLDocument        
        [System.XML.XMLElement]$oXMLRoot=$xmlDoc.CreateElement("sites")
        $xmlDoc.appendChild($oXMLRoot)                       

  foreach($sp in $props)
  {
            Write-Host 'Url:' $sp.Url

            # Append as child to an existing node
            [System.XML.XMLElement]$newXmlSiteURLElement=$oXMLRoot.appendChild($xmlDoc.CreateElement("SiteURL"))
            $newXmlNameTextNode = $newXmlSiteURLElement.AppendChild($xmlDoc.CreateTextNode($sp.Url));
                    
            #$sp.Url | out-file "C:\SiteCollectionList.xml"
   
            Get-SPOWebs($sp.Url)
  }                

        # Save File
        $xmlDoc.Save("c:\config1.xml")
}
catch
{
    Write-Host "$_.Exception.Message" -foregroundcolor black -backgroundcolor Red
    return
}

No comments:

Post a Comment