Update LookupWithPicker fields to Lookup fields.
# ----------------------------------------------
# Author: Christian Glessner / Romain Blanchard
# Date: 02.03.2015
# Description: Update LookupWithPicker fields to Lookup fields.
# ----------------------------------------------
param([string]$WebApplicationURL=$(throw 'Parameter -WebApplicationURL is missing!'))
# Initialize
$null = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$csvfile = "LookupWithPickerFields.csv"
Write-Output "WebURL;ListName;FieldName" | Out-File -FilePath $csvfile -Append
# Script
# Get Web Application
$WebApp = [Microsoft.SharePoint.Administration.SPWebApplication]::Lookup($WebApplicationURL)
# Process all Site Collection
foreach ($SiteCollection in $WebApp.Sites)
{
# Process all sites
foreach ($Web in $SiteCollection.AllWebs)
{
Write-Host "Working on $($Web.Url) ..."
# Process all lists
# Need to use for instead of foreach because we update fields during enumeration.
for ($i = 0; $i -lt $Web.Lists.Count; $i++)
{
$list = $web.Lists[$i];
# Process all fields
foreach ($field in $list.Fields)
{
# Test if current field is LookupWithPicker field
if($field.TypeAsString -eq "LookupFieldWithPicker")
{
# If yes, update it
[Guid] $listSearchGuid = $field.LookupList
$listSearch = $web.Lists[$listSearchGuid]
$fieldTitleSearch = $field.LookupField
$fieldSearch = $listSearch.Fields[$fieldTitleSearch]
$fieldIDSearch = $fieldSearch.ID
$schema = [xml]$field.SchemaXml;
if ($schema.Field.AllowMultipleValues -eq $true)
{
$schema.Field.Type = "LookupMulti"
}
else
{
$schema.Field.Type = "Lookup"
}
$schema.Field.RemoveAttribute("SearchFields")
$schema.Field.RemoveAttribute("EntityEditorRows")
$schema.Field.RemoveAttribute("MaxSearchResults")
$field.SchemaXml = $schema.PSBase.OuterXml
$field.Update()
# Save modification into csv file
Write-Output "$($Web.Url);$($list.Title);$($field.Title)" | Out-File -FilePath $csvfile -Append
}
}
}
}
}
Write-Host "Done !" -ForegroundColor Green
# ----------------------------------------------
# Author: Christian Glessner / Romain Blanchard
# Date: 02.03.2015
# Description: Update Lookup fields to LookupWithPicker fields.
# ----------------------------------------------
# Initialize
$null = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$inputcsv = "LookupWithPickerFields.csv"
$csv = Import-csv -Path $inputcsv -delimiter ';'
# Script
# Process for all fields previously modified from csv
$csv | foreach {
# Get field
$web = Get-SPWeb $_.WebURL
$list = $web.Lists[$_.ListName]
$field = $list.Fields[$_.FieldName];
# Update field
Write-Host "Update $($_.FieldName) field from $($_.WebURL) ..." -NoNewLine
[Guid] $listSearchGuid = $field.LookupList
$listSearch = $web.Lists[$listSearchGuid]
$fieldTitleSearch = $field.LookupField
$fieldSearch = $listSearch.Fields.GetFieldByInternalName($fieldTitleSearch);
$fieldIDSearch = $fieldSearch.ID
$schema = [xml]$field.SchemaXml;
$schema.Field.Type = "LookupFieldWithPicker"
if($schema.SelectSingleNode("//@SearchFields") -eq $null)
{
# Search field
$searchFields = $schema.CreateAttribute("SearchFields")
$searchFields.Value = $fieldIDSearch
$schema.Field.PSBase.Attributes.Append($searchFields) | Out-Null
# MaxResults field
$MaxResultsField = $schema.CreateAttribute("MaxSearchResults")
$MaxResultsField.Value = "100"
$schema.Field.PSBase.Attributes.Append($MaxResultsField) | Out-Null
#Update
$field.Update()
}
$field.SchemaXml = $schema.PSBase.OuterXml
Write-Host " done!" -ForegroundColor green
# Dispose web opened
if ($web) {$web.Dispose()}
}