Jaa


SharePoint 2010 PowerShell Script Series Part 1 – Hidden Content Types

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