In this article, we learn how to apply SharePoint master page using PnP PowerShell to a particular site collection or its subsites. SharePoint has two master pages one for site pages and one for system pages. PnP PowerShell provides several commands which can be executed from a remote machine instead to run from the server.
Below is the PnP PowerShell command to apply the SharePoint master page using PnP PowerShell.
Set-PnPMasterPage -MasterPageServerRelativeUrl <masterpagePath> -CustomMasterPageServerRelativeUrl <masterpagePath>
Parameters Description –
MasterPageServerRelativeUrl – This parameter takes the master page URL for all the system pages like settings.aspx and AllItems.aspx etc.
CustomMasterPageServerRelativeUrl – This parameter takes the master page URL for all the site pages like Home.aspx and default.aspx
Apply SharePoint master page using PnP PowerShell to Particular Site Collection
#Config Variables $SiteURL = "https://sp2016site.com/sites/project" try { #Connect to PnP Online Connect-PnPOnline -Url $SiteURL -UseWebLogin #Root Site Master Page URL $masterPageSiteRelativeUrl = "/_catalogs/masterpage/custom.master" #Apply Master page using PnP PowerShell Set-PnPMasterPage -MasterPageServerRelativeUrl $masterPageSiteRelativeUrl -CustomMasterPageServerRelativeUrl $masterPageSiteRelativeUrl } catch { write-host "Error: $($_.Exception.Message)" -foregroundcolor Red }
Note – Make sure you change the “SiteURL” from your site collection URL before running the script.
This is how you can apply the SharePoint master page using PnP PowerShell to a particular site collection.
How to Apply SharePoint Master Page using PnP PowerShell to site Collection and its Sub Sites
Below is the example to apply the master page to site collection and its sub-sites using PnP PowerShell –
#Config Variables $SiteURL = "https://sp2016site.com/sites/product" try { #Connect to PnP Online Connect-PnPOnline -Url $SiteURL -UseWebLogin #Root Site collection Master Page URL $masterPageSiteRelativeUrl = "/_catalogs/masterpage/custom.master" #Get Root Site Collection and subsites in SharePoint Online using PnP PowerShell $SubWebsCollections = Get-PnPSubWebs -Recurse -IncludeRootWeb #Iterate through each subsite ForEach($Web in $SubWebsCollections) { Connect-PnPOnline -Url $Web.Url -UseWebLogin Set-PnPMasterPage -MasterPageServerRelativeUrl $masterPageSiteRelativeUrl -CustomMasterPageServerRelativeUrl $masterPageSiteRelativeUrl } } catch { write-host "Error: $($_.Exception.Message)" -foregroundcolor Red }
First I make the connection to the Site Online site and then Iterate the root site collection and its sub-sites then one by one apply the top-level site collection master page to product site collection and its sub-sites.
You have noticed one thing in the above script I have used two below parameters with the PnPSubWebs command –
- -Recurse : Default PnPSubWebs fetch only the immediate sub-site under the particular site collection but if we use -Recurse it fetch the immediate sub-site as well as all the nested subsites.
- -IncludeRootWeb : This parameter is used to get Rootsweb as well like in our case it gets product root web.
You can use the same code to get site collection and sub-sites just comment on the PnPMasterPage PowerShell Cmdlet.
Conclusion
This is how you can apply the SharePoint master page using PnP PowerShell in SharePoint on-premises and SharePoint Online.