One of our user came up with a request to change all the old content type with the new one.
If you do google you will find lots of resource which can help you achieve it.
But our user had special request while changing the content type, the modified by or modified time should not be changed.
Below is the PowerShell to achieve it.
Add-PSSnapin Microsoft.SharePoint.PowerShell
#Custom PowerShell Function to switch Content type of all items stored in a SharePoint library
Function Change-ItemContentType {
param(
[Microsoft.SharePoint.SPWeb]$Web = $(throw "Please provide the 'Web' Parameter!"),
[string]$ListName = $(throw "Please provide the 'ListName' Parameter!"),
[string]$OldContentTypeName = $(throw "Please provide the 'OldContentTypeName' Parameter!"),
[string]$NewContentTypeName = $(throw "Please provide the 'NewContentTypeName' Parameter!")
)
#Get the list
$List = $Web.Lists[$ListName]
#Get the new content type
$NewContentType = $List.ContentTypes[$NewContentTypeName]
#Iterate through each item in the list
foreach($item in $list.Items)
{
if($item.ContentType.Name -eq $OldContentTypeName)
{
#Change the content type
$item["ContentTypeId"] = $NewContentType.Id
$item.SystemUpdate()
Write-host "Content type changed for item: "$item.id
}
}
}
#Variables for processing
$WebURL ="Site URL"
$ListName ="Library Name"
$ContentTypeName ="New Content type Name"
#Get the Web and List
$Web = Get-SPWeb $WebURL
$List = $Web.lists.TryGetList($ListName)
if($list -ne $null)
{
#Call the function to add content type
Change-ItemContentType $web $list "Old Content type Name" "New Content type Name"
}
Happy SharePointing :)
No comments:
Post a Comment