I’m excited to kick this series off because I really think PowerShell rocks. The goal of this series is to provide some automation for SharePoint Administrators to perform various deployment and/or troubleshooting tasks. To use the script simply copy it to notepad and save it with a ps1 extension. To run the script on your SharePoint 2010 environment, simply launch PowerShell and get to the directory where the script is located. To run the script type:

.\scriptname.ps1

The first script was created based on a blog I previously authored here. Please review that blog for more information. The following script provides the following functionality:

 

Selecting Option 1:

Creates a Content type derived from document and puts it in a special _hidden group at the site level. It also adds the hidden content type to a document library

Selecting Option 2:

If the hidden content type was created previously, choosing option 2 will add the hidden content type

Note: You will need to keep track of the names of the hidden content type by name after they are created.

 

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

Start-SPAssignment -Global
$siteurl = read-host "Enter the name of your site and press enter"
$site = New-Object Microsoft.SharePoint.SPSite($siteurl)
[Microsoft.SharePoint.SPWeb]$web = $site.OpenWeb()

Write-Host "Press 1 to create a hidden Content Type and add it to a Document Library"
Write-Host "Press 2 to add a previously created hidden Content type to a Document Library"

[int]$result = read-host

if($result -eq 1)
{
       [Microsoft.SharePoint.SPContentTypeCollection]$cts = $web.ContentTypes
       $parent = $web.ContentTypes | where {$_.id -eq "0x0101"}

       $ctName = Read-Host "Enter the name of your Content Type"
      
       #Creating ContentType and adding to the site collection
       $ct = New-Object Microsoft.SharePoint.SPContentType($parent, $cts, $ctName)
       $cts.Add($ct)
      
       #Putting the Content Type in the hidden Group
       $Ct.Group = "_Hidden"
       $ct.Update()
      
       #Adding Content Type to Document library
       Write-host "Adding Hidden Content Type to Document Library"
      
       $doclib = Read-host "Type the name of the Document Library you want to add it to and press Enter key."
       [Microsoft.SharePoint.SPList]$list = $web.Lists[$doclib];
      
       [Microsoft.SharePoint.SPDocumentLibrary]$oDocumentLibrary = $list;
      
       $oDocumentLibrary.ContentTypesEnabled = "true"
       
       write-host "Adding new hidden Content Type to Document Library"
       $oDocumentLibrary.ContentTypes.Add($ct)
       $list.Update()
      
       write-host("Operation Completed Successfully")

}


elseif($result -eq 2)
{
       $hiddenct = Read-Host "Enter the name of the Hidden Content Type and press Enter"
       $doclib = Read-host "Enter the name of the Document Library you want to add it to and press Enter"
      
       #Referencing DocLib
       [Microsoft.SharePoint.SPList]$list2 = $web.Lists[$doclib]
       [Microsoft.SharePoint.SPDocumentLibrary]$oDocumentLibrary = $list2;
       $oDocumentLibrary.ContentTypesEnabled = "true"
      
       #Pull the ContentType from the Hidden Group and Add it to the DocLib
       $cthid = $web.AvailableContentTypes[$hiddenct]
      
       #Add hidden Content Type to DocLibrary
       write-host "Adding hidden Content Type to Document Library"
       $oDocumentLibrary.ContentTypes.Add($cthid);
        $list2.Update();
       write-host "Operation Completed Successfully"
}

else {write-host "Run the script again and choose option 1 or 2"}

#Disposing Objects now
Stop-SPAssignment -Global

 

Thanks!

-Russmax   Alien