I want to be able to see the number, names, url of all site collections there are in a given farm. Would there be a powershell command to do that?

5 Answers 5


There should be a powershell equivalent of stsadm.exe -o enumsites -url https://sp.root.com > "U:\XML\siteowners.xml" which is what I use to generate XML for import into Excel to view all top level site collections, the owners, the content db it lives in and the size/quota information.

  • All the answers were correct but I loved this one because of the xml formatted output!
    – Regmi
    Nov 1, 2011 at 21:27
  • While this answer is correct, stsadm has been deprecated; I posted an answer that shows how to output PowerShell objects as XML.
    – webdes03
    Nov 2, 2011 at 1:12
  • Just not on 2010 yet :-( Nov 2, 2011 at 12:02

If all you want is a list of all site collections in the farm, all you have to do is open a PowerShell window, load the SharePoint snapin if you haven't (Add-PSSnapin Microsoft.SharePoint.PowerShell), and type Get-SPSite.

If you want to return the list of site collections for a specific web application, the easiest way is to just pipe it as Get-SPWebApplication http://intranet | Get-SPSite.

If you want to grab additional information like boflynn suggested, you can also do this with a pipe; no need to script, or loop: Get-SPWebApplication http://intranet | Get-SPSite | Select ID, Url.

You can also easily convert any PowerShell object or object array into XML using the Export-Clixml cmdlet. As an example, here's the previous command to get the ID and Url of all intranet web application sites, piped to an XML file: Get-SPWebApplication http://intranet | Get-SPSite | Select ID, Url | Export-Clixml c:\intranetsites.xml

There's many output and conversion options; likewise, you also have the ability to output as a CSV using Export-Csv.

Previous answers are not incorrect, but these are cleaner and shorter ways to do it.

  • This can also display the URL for Central Administration: Get-SPWebApplication -IncludeCentralAdministration
    – Underverse
    Oct 13, 2015 at 0:09

Get-SPSite will return the site collections for you. If you want more details, you can loop through them for further processing:

foreach($site in Get-SPSite) {
    echo $site.Url
    echo $site.ID
    #anything else here
  • 1
    I find this was one to be the second best answer as I could add site properties as I wanted.
    – Regmi
    Nov 1, 2011 at 21:29
  • 1
    Excellent. For a list of values for which can be displayed: Get-SPSite | Get-Member * Output formatted on one line: foreach($site in Get-SPSite -Limit ALL) { Write-Host ($site.Url + " - " + $site.ID) }
    – Underverse
    Oct 13, 2015 at 0:29
$siteUrl = Read-Host "Enter Site URL"
$rootSite = New-Object Microsoft.SharePoint.SPSite($siteUrl)
$spWebApp = $rootSite.WebApplication

foreach($site in $spWebApp.Sites)
    foreach($siteAdmin in $site.RootWeb.SiteAdministrators)
        Write-Host "$($siteAdmin.ParentWeb.Url) - $($siteAdmin.DisplayName)"

If you copy your question title and past it into google search, the first link search result will contain a powershell script that describes how to collect site collections. But do not fogive to add Add-PSSnapin Microsoft.SharePoint.PowerShell command befor your comands.

  • 2
    Not true, the first link ends up pointing to this very page!
    – Alan M
    Mar 8, 2013 at 18:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.