The unique identifier for a Communication site is the web template used, and the name of the template for Communication sites is SITEPAGEPUBLISHING.
With this piece of information there are a couple of options you can use to find all the sites.
The first is to iterate over all site collections, and filter on the web template property, the other is to use search.
To list all sites you can use the SPO Management Shell, CSOM tenant API, or hope my PR at PnP PowerShell get’s accepted (https://github.com/SharePoint/PnP-PowerShell/pull/998)
Basically the CSOM code looks something like this:
SPOSitePropertiesEnumerableFilter filter = new SPOSitePropertiesEnumerableFilter() { IncludePersonalSite = PersonalSiteFilter.UseServerDefault, StartIndex = null, IncludeDetail = true, Template = "SITEPAGEPUBLISHING#0", Filter = null }; var list = Tenant.GetSitePropertiesFromSharePointByFilters(filter);
Using the SharePoint Online Management Shell do this:
Connect-SPOService https://contoso-admin.sharepoint.com Get-SPOSite -Template SITEPAGEPUBLISHING#0 -Limit ALL
With the PR accepted you would be able to use PnP Posh with the following command to list all Communication sites much like the management shell:
Connect-PnPOnline https://contoso-admin.sharepoint.com Get-PnPTenantSite -WebTemplate SITEPAGEPUBLISHING#0
If you want to use search, you can use the Submit-PnPSearchQuery commandlet.
Submit-PnPSearchQuery -Query "webtemplate=SITEPAGEPUBLISHING" -All -RelevantResultsThis approach is of course available for other templates as well. Happy iteration!