Create Multiple Site Collections from a CSV using PnP script

Brass Contributor

Hello All,

Creating bulk site collections very normal use case, Please find the below PS Script to create multiple site collections from your CSV file.


#Config Parameters
$TenantUrl = Read-Host "Enter SharePoint tenant admin URL"
$CSVPath = "C:\Temp\SiteCollections.csv"

#Connect to Tenant
Connect-PnPOnline -url $TenantUrl -Credentials (Get-Credential) #or -UseWebLogin for MFA

Try {
#Get Site Collections to create from a CSV file
$SiteCollections = Import-Csv -Path $CSVPath

#Loop through csv and create site collections from each row
ForEach ($Site in $SiteCollections)
{
#Get Parameters from CSV

$Title = $Site.Title
$Url = $Site.Url
$Owner =$Site.Owner
$Template = $Site.Template
$StorageQuota = $Site.StorageQuota
$TimeZone = $Site.TimeZone

#Check if site exists already
$SiteExists = Get-PnPTenantSite | Where {$_.Url -eq $URL}
If ($SiteExists -eq $null)
{
#Create site collection
Write-host "Creating Site Collection:"$Site.URL -f Yellow
New-PnPTenantSite -Url $URL -Title $Title -Owner $Owner -Template $Template -TimeZone $TimeZone -RemoveDeletedSite -ErrorAction Stop
Write-host "`t Done!" -f Green
}
Else
{
write-host "Site $($URL) exists already!" -foregroundcolor Yellow
}
}
}
Catch {
write-host -f Red "`tError:" $_.Exception.Message
}

1 Reply

@Kamal Pandey 

 

I get an error:

Creating Site Collection:
Error: Cannot bind argument to parameter 'Url' because it is null.

 

My headers in the csv are: Title;Url;Owner;Template;StorageQuota;Timezone

Any idea what I'm doing wrong?