Getting a list of all subsites of a particular site (not a site collection) was a little more work than I expected, so here is how I did it.
Let’s say we have the following situation site structure:
Image may be NSFW.
Clik here to view.
What if we want an overview of all sites under “Https://portal.sharepointrelated.com/Projects”?
My first thought was to use the “Webs” property of the SPWeb object. Unfortunately, this only shows the direct subsites for this site. This means that for “Https://portal.sharepointrelated.com/projects”, it only shows the Level 3 sites.
Solution
To work around this, I used the “AllWebs” property of the SPSite object and filtered the URL’s starting with “Https://portal.sharepointrelated.com/projects”.
Here is the code used: (Download .zip file)
param ( [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()] [String]$StartWeb, [Boolean]$IncludeStartWeb = $true ) Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue $subsites = ((Get-SPWeb $StartWeb).Site).allwebs | ?{$_.url -like "$StartWeb*"} foreach($subsite in $subsites) { Write-Host $subsite.url }
As you can see in the source code, I added 2 parameters to the script:
StartWeb: String. This is the starting URL. All subsites under this site will be showed in the result.
IncludeStartWeb: Boolean. When set to $false, the output will not include the URL provided in the StartWeb parameter.
Image may be NSFW.
Clik here to view.

Clik here to view.
