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