Live Developer Training: next batch coming soon. Be the first to know.Live training: next batch soonJoin the waitlist →Join →

How to Create a Site in SharePoint Online Using PnP PowerShell

Our marketing team wanted a new intranet site for campaign news, and they wanted it the same way every time: English, Eastern time, the Topic layout and a clean URL. Clicking through Create site in SharePoint works once, but it’s slow and easy to get wrong when you build sites for several departments.

That’s where PnP PowerShell earns its keep. I’ll show you how I create communication sites and team sites with New-PnPSite, using a real site I built in my own Microsoft 365 tenant, plus the classic New-PnPTenantSite cmdlet, bulk creation from a CSV file and fixes for the errors you’ll hit.

Quick answer: Connect with Connect-PnPOnline -Url https://contoso-admin.sharepoint.com -ClientId <your-app-id> -Interactive, then run New-PnPSite -Type CommunicationSite -Title "Marketing" -Url https://contoso.sharepoint.com/sites/Marketing. Use -Type TeamSite -Alias Marketing for a team site with a Microsoft 365 group, or -Type TeamSiteWithoutMicrosoft365Group for a team site without one.

Which type of SharePoint site should you create?

New-PnPSite creates modern sites only, and its -Type parameter decides which kind. Pick the type first, because a few parameters only exist for one type. If you’re unsure which fits, I compare them in detail in the difference between team sites and communication sites.

-Type valueWhat you getRequired parameters
CommunicationSiteA site for publishing news and pages to a wide audience; no Microsoft 365 group-Title, -Url
TeamSiteA team site connected to a new Microsoft 365 group (shared mailbox, calendar, Planner, Teams-ready)-Title, -Alias
TeamSiteWithoutMicrosoft365GroupA modern team site for collaboration without a group (template STS#3)-Title, -Url

Prefer the browser for a one-off site? My guide on how to create a SharePoint site covers the Create site wizard.

Before you start: module, connection and permissions

You need PnP PowerShell in PowerShell 7.4 or later and your own Entra ID app registration, because Connect-PnPOnline requires a -ClientId. If you haven’t set that up yet, start with installing PnP PowerShell for SharePoint Online.

I connect to the SharePoint admin center, because the same connection also runs Get-PnPTenantSite to check URLs and confirm the result:

$adminUrl = "https://contoso-admin.sharepoint.com"
$clientId = "00000000-0000-0000-0000-000000000000"   # your Entra ID app's client ID

Connect-PnPOnline -Url $adminUrl -ClientId $clientId -Interactive
  • Who can create sites: a SharePoint Administrator or Global Administrator always can. Regular users can only if the admin center setting Users can create SharePoint sites is on; Microsoft notes that this setting also covers the PnP cmdlet and the REST API.
  • App permissions: the app needs SharePoint AllSites.FullControl (delegated) or Sites.FullControl.All (application). Group-connected team sites also need Microsoft Graph Group.ReadWrite.All.
  • Owner: with a delegated sign-in, you become the site owner unless you pass -Owner (or -Owners for team sites). App-only connections must pass one.

Create a communication site with New-PnPSite

Here’s the script I ran to create the Contoso Marketing Demo site. It checks that the URL is free first, then creates the site with US English (LCID 1033), Eastern time and the Topic design:

New-PnPSite creating a SharePoint Online communication site with PnP PowerShell in PowerShell 7

New-PnPSite returns the new site’s URL, and in my tenant that took 4 seconds. A few notes on the parameters:

  • -SiteDesign takes Topic, Showcase or Blank, the same three designs you see in the browser. It works only for communication sites.
  • -SiteDesignId applies your own site design by its GUID instead, and it works for every type. Custom designs come from a site script you’ve registered; see creating a custom site template in SharePoint Online.
  • -Lcid sets the site language, and you can’t change it later. 1033 is English (United States).
  • -TimeZone takes a named value such as UTCMINUS0500_EASTERN_TIME_US_AND_CANADA; press Tab after the parameter to cycle through them.
  • -Wait makes the cmdlet wait until SharePoint has fully provisioned the site. I skip it for a single site and use it in scripts that immediately add lists or pages.

V