Of course, all the regular legal stuff applies. Use at your own risk. I do not accept any liability for what happens when you run this script. And never, never, run a random script you've downloaded from the internet against a production environment without properly testing and examining it.
param( [string]$WebUrl = $(throw "WebUrl required.") ) #Region [ Load Assemblies ] $spNotFoundMsg = "SharePoint not found. Run this script from a SharePoint server that is part of the farm where you want to update your content types" if ([Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") -eq $null) { throw $spNotFoundMsg; } if ([Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server") -eq $null) { throw $spNotFoundMsg; } if ([Reflection.Assembly]::LoadWithPartialName("System.Xml.Linq") -eq $null) { throw $spNotFoundMsg; } if ([Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server") -eq $null) { throw $spNotFoundMsg; } if ([Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server.UserProfiles") -eq $null) { throw $spNotFoundMsg; } if ([Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Taxonomy") -eq $null) { throw $spNotFoundMsg; } $snapin = Get-PSSnapin | Where-Object {$_.Name -eq 'Microsoft.SharePoint.Powershell'} if ($snapin -eq $null) { Write-Output "Loading Microsoft SharePoint Powershell Snapin" Add-PSSnapin "Microsoft.SharePoint.Powershell" } #endregion $web = get-SPWeb $WebUrl $oldProperties = $web.AllProperties.Clone() $web | % { foreach ($property in $_.PSObject.Properties) { $oldProperties.Add("SPWeb." + $property.Name, $_.PSObject.properties[$property.Name].Value -as [string]) }} $web.Dispose() Write-Host "We have grabbed a copy of the properties as they are now. Make your change, and press any key to continue.." While ($KeyInfo.VirtualKeyCode -Eq $Null) { $KeyInfo = $Host.UI.RawUI.ReadKey("NoEcho, IncludeKeyDown") } $web = get-SPWeb $WebUrl $newProperties = $web.AllProperties.Clone() $web | % { foreach ($property in $_.PSObject.Properties) { $newProperties.Add("SPWeb." + $property.Name, $_.PSObject.properties[$property.Name].Value -as [string]) }} $updates = 0 $additions = 0 foreach ($h in $newProperties.Keys) { $newValue = $newProperties.Item($h) if ($oldProperties.Keys.Contains($h)) { $oldValue = $oldProperties.Item($h) if ($oldValue -ne $newValue) { $updates++ Write-Host "`nFound an update in the property '$h'.`n'$oldValue'`nbecame`n'$newValue'" } } else { $additions++ Write-Host "`nFound an new property '$h', with the following value:`n'$newValue'" } } Write-Host "Found $updates updates and $additions additions" $web.Dispose()
No comments:
Post a Comment