Thursday, March 7, 2013

Export-Import SharePoint Content Type using PowerShell

Requirement: Copy a Content Type from development environment to staging environment.

Solution Overview:

  1. Export site columns associated with the content type from the source site collection
  2. Export custom content data types from source site collection
  3. Import site columns from the exported site columns xml
  4. Re-Create custom content types programmatically with PowerShell in the target site collection.
Steps in detail:
To Export and Import Site columns associated with the particular content type, follow my post:  Export Import Site Columns with PowerShell

Export Import SharePoint Content Type to XML using PowerShell
Once all fields of the particular content type is exported and imported, we can Export-Import Content types:

PowerShell Script to Export Content Type to XML:

    #Get the Source Web
    $SourceWeb = Get-SPWeb ""
    #Create Export XML File
    $XMLFile = "C:\SiteContentTypes.xml"
    New-Item $XMLFile -type file -force
    #Wrap Content Type Schema XML inside <ContentTypes> Element 
    Add-Content $XMLFile "`n<ContentTypes>"

    #Export All Content types of specific Group to XML file
    $sourceWeb.ContentTypes | ForEach-Object {
        if ($_.Group -eq "Crescent Content Types") 
     #Export Content Types to XML file
            Add-Content $XMLFile $_.SchemaXml
    #Closing Wrapper 
    Add-Content $XMLFile "</ContentTypes>"

    #Dispose the web object

PowerShell Script to Import Content Type:
 [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null
      #Get the Target Web
      $TargetWeb = Get-SPWeb ""
    #Get the Content Type Schema from XML
    $XMLFile = "C:\SiteContentTypes.xml"  
    [xml] $CTypeXML = Get-Content($XMLFile)
    #Create Site Content Types
    $CTypeXML.ContentTypes.ContentType | ForEach-Object {

        #Create New Content Type object inheriting from parent
        $SPContentType = New-Object Microsoft.SharePoint.SPContentType ($_.ID,$TargetWeb.ContentTypes,$_.Name)
        #Set Content Type description and group
        $SPContentType.Description = $_.Description
        $SPContentType.Group = $_.Group
     #Get all field References from the XML
        $_.Fields.Field  | ForEach-Object {
   write-host $_.DisplayName
   #Add Fields Reference to the New content type
            if( !$SPContentType.FieldLinks[$_.DisplayName])
                #Create a field link for the Content Type by getting an existing column
                $SPFieldLink = New-Object Microsoft.SharePoint.SPFieldLink ($TargetWeb.Fields[$_.DisplayName])
                #Check to see if column is Optional, Required or Hidden
                if ($_.Required -eq "TRUE") {$SPFieldLink.Required = $true}
                if ($_.Hidden -eq "TRUE") {$SPFieldLink.Hidden = $true}
                #Add column to Content Type
        #Create Content Type on the site and update Content Type object
        $ct = $TargetWeb.ContentTypes.Add($SPContentType)
        write-host "Content type'" $ct.Name "'has been created"


Thanks to:

You might also like:
SharePoint Usage Reports
Usage reports, collaboration and audit for SharePoint.
Document SharePoint Farm
Automatically generate SharePoint documentation.

Check out these SharePoint products:

1 comment :

  1. Hey guy, just want to let you know that this code was just what I needed to migrate some content types to another site collection when we didn't want to use the content hub. What a quick and elegant solution. Thanks again.


Please Login and comment to get your questions answered!

You might also like:

Related Posts Plugin for WordPress, Blogger...