Last night I search for “export import sharepoint 2013 design packages powershell”. No luck there. – So I created two functions for this purpose. It works nicely 🙂
The functions only use public methods of the SharePoint (Server) Object Model. No reflection, et cetera. The most important class in this context is “Microsoft.SharePoint.Publishing.DesignPackage”. It has two methods: Export and Install. This I used to create to PowerShell functions: Export-SPDesignPackage and Import-SPDesignPackage. Both are able to work in PowerShell pipeline context. This gives you the possibility to export a bunch of Design Packages from several sites using PowerShell.
You can download the scripts here:
http://gallery.technet.microsoft.com/Export-and-Import-0f41b376
You can use the scripts as PowerShell modules or by copying the content to your own PowerShell script files. But please be careful: By now it’s only tested in my dev environment!!
The scripts use the SharePoint Server Object Model. So they have to be executed on a SharePoint farm server! You also need an priviledged account that has rights to export (or import) SharePoint Design Packages.
Today I’ll describe the export function. Tomorrow or the day after tomorrow I’ll publish a description of the import function. Here is the import part: https://blog.kenaro.com/2013/02/18/sharepoint-2013-design-packages-import-with-powershell-part-2-of-2/
Export-SPDesignPackage
Here are some samples:
$site1=get-spsite"http://sharepoint.local/publishing"
$site2=get-spsite"http://sharepoint.local/sites/publishing2"
#First Sample
$cred=new-objectSystem.Management.Automation.PSCredential( "domain\spfarm", (ConvertTo-SecureString-AsPlainText"Passw0rd"-Force))
$site1, $site2 | Export-SPDesignPackage -UseTempFileForExportWithExtension ".wsp" -DownloadCredentials $cred -PackageName "test"#Second Sample
$site1, $site2 | Export-SPDesignPackage -ExportFileName "C:\temp\Package.wsp" -UseExportFileNumbering -IncludeSearchConfig -DisposeSiteObject -OverwriteExistingFiles
#Third Sample
(
@{PackageName="P1"; ExportFileName="C:\temp\p1.wsp"; SiteUrl="http://sharepoint.local/publishing"},
@{PackageName="P2"; ExportFileName="C:\temp\p2.wsp"; SiteUrl="http://sharepoint.local/sites/publishing2"}
) | New-ObjectFromHashtable | Export-SPDesignPackage
#Fourth Sample
$site2 | Export-SPDesignPackage -ExportFileName "C:\temp\publishing2.wsp" -IncludeSearchConfig -DisposeSiteObject -OverwriteExistingFiles
The first sample uses two SPSite objects as (pipeline) input and tells the function to export the design packages to temp files with auto generated names. For the download of the packages from the sites you can specify “download credentials”.
The second sample exports the same two SPSites. The export file name is specified. By using “UseExportFileNumbering” a number is inserted into the file name like this: “c:\temp\package-1.wsp”. So both export packages have different file names.
The third sample exports two sites with individual export settings for each site. This is possible by “parameter binding by property name” where PowerShell binds the input object’s property to the function / cmdlet input parameters by name matching. But this does not work with hashtables. Therefore I created a helper function “New-ObjectFromHashtable” that creates a PowerShell object (“PSObject”). This function is generic. (It’s also included in the script files.)
The fourth sample exports just one site.
Parameters
The function has the following parameters. All can be bound by “parameter binding by property name”!
Parameter Name |
Parameter Set Name |
Mandatory? |
Position |
Description |
SiteUrl |
Default |
Yes |
0 |
Url of Site Collection as System.String |
Site |
Site |
Yes |
0 |
SPSite-object |
ExportFileName |
Default
Site
|
No |
1 |
Name for the exported file in the file system. The folder must exist!
Cannot be used together with “ExportFolder” and “UseTempFileForExportWithExtension”!
|
ExportFolder |
Default
Site
|
No |
1 |
Name of the folder for the exported design packages. The file name will be created through the SharePoint Server Object Model.
Cannot be used together with “ExportFileName” and “UseTempFileForExportWithExtension”!
|
UseTempFileForExportWithExtension |
Default
Site
|
No |
1 |
When specified the function will create a file name automatically by using "System.IO.Path.GetTempFileName()”. But it adds the extension you specify here. You should use “.wsp” by default. |
PackageName |
Default
Site
|
No |
2 |
Name of the export package. This is not a file name but an internal name that is used inside the design package. This is optional. The Object Model can handle it for you. |
IncludeSearchConfig |
Default
Site
|
No |
3 |
http://msdn.microsoft.com/en-us/library/jj862342.aspx |
DisposeSiteObject |
Site |
No |
– |
If you use SPSite objects as input you can specify whether the function should dispose it or not. Default: TRUE = “Please dispose it for me”! |
DownloadCredentials |
Default
Site
|
No |
– |
You can specify credentials for the download of the generated package. The package is stored in the the solution gallery of the site collection. It’s downloaded by the function by using System.Net.WebClient with “DefaultNetworkCredentials” if no credentials are specified. |
OverwriteExistingFiles |
Default
Site
|
No |
– |
If specified it overwrites the export file if it exists. If not specified it skips the export. But in the case nevertheless the design package will be created . |
UseExportFileNumbering |
Default
Site
|
No |
– |
If you use “ExportFileName” you can specify this parameter to insert numbers into the given file name as described above. |
The function returns an object for each processed (or not processed) site collection:
This objects can be used in pipelines or … as you like.
Object Property |
Description |
Site Url |
Url of the processed site |
Success |
TRUE = Export successful, export file created. |
SiteFound |
The site collection was found |
ExportError |
$null = OK
System.Exception = Error occurred
|
PackageFileName |
Name of the Package created by the Object Model |
PackageName |
Name of the Package created by you OR the Object Model |
PackageMajorVersion |
…created by Object Model during export |
PackageMinorVersion |
…created by Object Model during export |
ExportFileOverridden |
If “TRUE” the export file did exist but was overridden during export. If “OverwriteExistingFiles” parameter was NOT specified this property will always be FALSE. |
DownloadError |
$null = OK
System.Exception = Error during download
|
Some Additions
The design package will be stored in the solution gallery of the site collection that can be found here: <site-collection-url>/_catalogs/solutions. It’s the same location as for the sandboxed solutions. It interesting: sandboxed solutions are deprecated but in this case they use at least the same storage for a new functionality.
After the package is created you can download it from the solution gallery. No big deal.