This scripts shows how to get all the sites in a SharePoint 2013 (OnPremises) Site Collection using the SharePoint Client Side Object Model (CSOM). The script defines a
function that follows the CSOM rules in order to get all the existing sites under a specific site collection. In order to use the Client Side Object Model in PowerShell, It’s required to add the CSOM assemblies and then follow the same rules when programing with this API.

PowerShell
Editar script|Remove
############################################################################################################################################ 
# Script that allows to get all the sites defined under a SharePoint  Site Collection using CSOM 
# Required Parameters: 
#  -> $sUserName: User Name to connect to the SharePoint Site Collection. 
#  -> $sPassword: Password for the user. 
#  -> $sDomain: AD Domain for the user. 
#  -> $sSiteColUrl: Site Collection Url. 
############################################################################################################################################ 
 
$host.Runspace.ThreadOptions = "ReuseThread" 
 
#Definition of the function that gets all the sites in a SharePoint Site Collection 
function Get-SPSitesInSC 
{ 
    param ($sSiteColUrl,$sUserName,$sDomain,$sPassword) 
    try 
    {     
        Write-Host "----------------------------------------------------------------------------"  -foregroundcolor Green 
        Write-Host "Getting all the sites in a SharePoint Online Site Collection" -foregroundcolor Green 
        Write-Host "----------------------------------------------------------------------------"  -foregroundcolor Green 
      
        #Adding the Client OM Assemblies         
        Add-Type -Path "C:\Scripts PS\02 Office 365\Microsoft.SharePoint.Client.dll" 
        Add-Type -Path "C:\Scripts PS\02 Office 365\Microsoft.SharePoint.Client.Runtime.dll" 
 
        #SharePoint Client Object Model Context 
        $spCtx = New-Object Microsoft.SharePoint.Client.ClientContext($sSiteColUrl)  
        $spCredentials = New-Object System.Net.NetworkCredential($sUserName,$sPassword,$sDomain)   
        $spCtx.Credentials = $spCredentials  
 
        #Root Web Site 
        $spRootWebSite = $spCtx.Web 
        #Collecction of Sites under the Root Web Site 
        $spSites = $spRootWebSite.Webs 
 
        #Loading operations         
        $spCtx.Load($spRootWebSite) 
        $spCtx.Load($spSites) 
        $spCtx.ExecuteQuery() 
 
        #We need to iterate through the $spoSites Object in order to get individual sites information 
        foreach($spSite in $spSites){ 
            $spCtx.Load($spSite) 
            $spCtx.ExecuteQuery() 
            Write-Host $spSite.Title " - " $spSite.Url -ForegroundColor Green 
        } 
        $spCtx.Dispose() 
    } 
    catch [System.Exception] 
    { 
        write-host -f red $_.Exception.ToString()    
    }     
} 
 
#Required Parameters 
$sSiteColUrl = "http://c4968397007/sites/Intranet"  
$sUserName = "Administrator"  
$sDomain="DC07" 
$sPassword ="Ik5YXgZ7fj"  
 
 
Get-SPSitesInSC -sSiteColUrl $sSiteColUrl -sUserName $sUserName -sDomain $sDomain -sPassword $sPassword