Export-Import Quota Templates in SharePoint using PowerShell
In SharePoint database attach method migration, Quota templates must be created manually between farms. It’s a pain when you have multiple quotas defined. These PowerShell scripts simplify the process by exporting quotas to an XML file and import them again to another farm.
PowerShell Script to Export/Import Quotas between environments:
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
[Void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Administration")
function Export-QuotaTemplates([string]$FileName)
{
#Get the SharePoint Web Application Service
$ContentService =[Microsoft.SharePoint.Administration.SPWebService]::ContentService
#Define Quota Templates XML -Container wrap
$QuotaTemplateXML = '<QuotaTemplates>'
#Get all Quota Templates
foreach ($QuotaTemplate in $contentService.QuotaTemplates)
{
#Add Quota Templates to XML
$QuotaTemplateXML += '<QuotaTemplate>'
$QuotaTemplateXML += '<ID>'+ $QuotaTemplate.QuotaID +'</ID>'
$QuotaTemplateXML += '<Name>'+ $QuotaTemplate.Name +'</Name>'
$QuotaTemplateXML += '<StorageMaximumLevel>'+ [int](($QuotaTemplate.StorageMaximumLevel/ 1024)/1024) +'</StorageMaximumLevel>'
$QuotaTemplateXML += '<StorageWarningLevel>'+ [int](($QuotaTemplate.StorageWarningLevel/ 1024)/1024) +'</StorageWarningLevel>'
<# These two Properties applicable only for SharePoint 2010 and above!
$QuotaTemplateXML += '<UserCodeMaximumLevel>'+ $QuotaTemplate.UserCodeMaximumLevel +'</UserCodeMaximumLevel>'
$QuotaTemplateXML += '<UserCodeWarningLevel>'+ $QuotaTemplate.UserCodeWarningLevel +'</UserCodeWarningLevel>'
#>
$QuotaTemplateXML += '</QuotaTemplate>'
}
#Wrap Into the closing element
$QuotaTemplateXML += '</QuotaTemplates>'
$QuotaTemplateXML | Out-File $FileName
Write-Host "Exported Quota Templates!"
}
#Call Import Quota Templates Function
Export-QuotaTemplates "QuotaTemplates.xml"
Once exported, We can copy the exported XML file to the target environment and run the Import script.
PowerShell Script to Import Quota Templates:
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
[Void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Administration")
function Import-QuotaTemplates([string]$FileName)
{
#Get the XML File Contents
[xml]$QuotaTemplateXML = Get-Content $FileName
$ContentService =[Microsoft.SharePoint.Administration.SPWebService]::ContentService
#Get existing Quotas collection
$QuotaTemplateColl = $ContentService.QuotaTemplates
#Iterate throught each Quota Template
foreach($QuotaTemplate in $QuotaTemplateXML.QuotaTemplates.QuotaTemplate)
{
Write-Host "Processing:" $QuotaTemplate.Name
#Check if Quota Template already exists!
if ($QuotaTemplateColl[$QuotaTemplate.Name] -ne $null)
{
Write-Host " >> Quota template: " $QuotaTemplate.Name " Already exists!"
}
else #Create the Quota Template
{
$NewQuotaTemplate = new-object Microsoft.SharePoint.Administration.SPQuotaTemplate
$NewQuotaTemplate.Name = $QuotaTemplate.Name
$NewQuotaTemplate.StorageMaximumLevel = $QuotaTemplate.StorageMaximumLevel
$NewQuotaTemplate.StorageWarningLevel = $QuotaTemplate.StorageWarningLevel
<# These two Properties applicable only for SharePoint 2010 and above!
$NewQuotaTemplate.UserCodeMaximumLevel = $QuotaTemplate.UserCodeMaximumLevel
$NewQuotaTemplate.UserCodeWarningLevel = $QuotaTemplate.UserCodeWarningLevel
#>
$QuotaTemplateColl.Add($NewQuotaTemplate)
Write-Host " >> Quota template ", $NewQuotaTemplate.Name ," is imported to the Quota Templates"
}
}
}
#Call Import Quota Templates Function
Import-QuotaTemplates "QuotaTemplates.xml"
Remove the MB conversion and set datatype from int to long. [int](($QuotaTemplate.StorageMaximumLevel/ 1024)/1024) to [long]($QuotaTemplate.StorageMaximumLevel) Worked for me for export on SP2016 and import on SP2019
The quota template was created in the target farm however they all had 1 MB for site storage. The source templates site quotas were all different.
I know this is years old. But this worked for me (SP2016) once I removed the conversion to MB in the export script.