Forum Discussion
Fromelard
Nov 27, 2018Iron Contributor
SharePoint Online: PowerShell script to Remove a defined column accross the Site collection
Our large SharePoint Online Site collection used for Intranet Corporate Portal based on Publishing site, we have a large number of subsites into.
We had to remove a field place into the page library of all those subsites.
The following script was built to do that removal.
You can adapt it as you want for your own requirements.
[string]$username = "Admin@yourtenant.onmicrosoft.com"
[string]$PwdTXTPath = "C:\SECUREDPWD\ExportedPWD-$($username).txt"
$secureStringPwd = ConvertTo-SecureString -string (Get-Content $PwdTXTPath)
$adminCreds = New-Object System.Management.Automation.PSCredential $username, $secureStringPwd
[string]$RootSiteToCheck = "https://yourtenant.sharepoint.com/sites/YourSiteCollection"
[string]$SPListToCheck = "Pages"
[string]$SPFieldInternalNameToCheck = "PublishedDate"
function Load-DLLandAssemblies
{
[string]$defaultDLLPath = ""
# Load assemblies to PowerShell session
$defaultDLLPath = "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.SharePoint.Client.dll"
[System.Reflection.Assembly]::LoadFile($defaultDLLPath)
$defaultDLLPath = "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.SharePoint.Client.Runtime.dll"
[System.Reflection.Assembly]::LoadFile($defaultDLLPath)
$defaultDLLPath = "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll"
[System.Reflection.Assembly]::LoadFile($defaultDLLPath)
}
function Check-And-Fix-Field-In-SPList ([Microsoft.SharePoint.Client.ClientContext]$Context, [Microsoft.SharePoint.Client.Web]$CurrentWeb)
{
$MyCurrentListTocheck = $CurrentWeb.Lists.GetByTitle($SPListToCheck)
$AllSPListCT = $MyCurrentListTocheck.ContentTypes
$Context.Load($MyCurrentListTocheck)
$Context.Load($AllSPListCT)
$Context.ExecuteQuery()
Write-Host " ===>>> SubSite to check:", $CurrentWeb.Title, "- URL:", $CurrentWeb.Url -ForegroundColor Green
Write-Host " ===>>> List to check:", $MyCurrentListTocheck.Title -ForegroundColor Green
foreach($MySpListCT in $AllSPListCT)
{
Write-Host " -->> Content Type Name:", $MySpListCT.Name
Write-Host " -->> Content Type ID:", $MySpListCT.id
$Myfields = $MySpListCT.Fields
$Context.Load($Myfields)
$Context.ExecuteQuery()
$MyfieldToCheck = ($Myfields | where {$_.InternalName -eq $SPFieldInternalNameToCheck})
if($MyfieldToCheck -ne $null)
{
Write-Host " ---------------------------------------------- " -ForegroundColor Yellow
Write-Host " >>>> Field Name:", $MyfieldToCheck.Title -ForegroundColor Yellow
Write-Host " >>>> Field InternalName:", $MyfieldToCheck.InternalName, "- Field ID:", $MyfieldToCheck.id -ForegroundColor Yellow
Write-Host " >>>> Field Required:", $MyfieldToCheck.Required -ForegroundColor Yellow
Write-Host " ---------------------------------------------- " -ForegroundColor Yellow
$MyfieldToCheck.DeleteObject();
$MySpListCT.Update($false);
$Context.Load($MySpListCT);
$Context.ExecuteQuery()
Write-Host " >>>> Field Deleted !!!!" -ForegroundColor Red
}
}
}
function Get-SPOSubWebs
{
Param(
[Microsoft.SharePoint.Client.ClientContext]$Context,
[Microsoft.SharePoint.Client.Web]$RootWeb
)
$Webs = $RootWeb.Webs
$Context.Load($Webs)
$Context.ExecuteQuery()
ForEach ($sWeb in $Webs)
{
Write-host " ====>> SubSite:", $sWeb.URL -ForegroundColor red
Check-And-Fix-Field-In-SPList $Context $sWeb
Get-SPOSubWebs -RootWeb $sWeb -Context $Context
}
}
cls
Write-Host " ---------------------------------------------- "
Load-DLLandAssemblies
Write-Host " ---------------------------------------------- "
Write-host "===================================================================================================" -ForegroundColor Green
$mySitectx = New-Object Microsoft.SharePoint.Client.ClientContext($RootSiteToCheck)
$mySitectx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($adminCreds.UserName, $adminCreds.Password)
$mySitectx.RequestTimeout = 1000000 # milliseconds
$myCurrentWeb = $mySitectx.Web
$mySitectx.Load($myCurrentWeb)
$mySitectx.ExecuteQuery()
Write-Host " "
Write-Host " ---------------------------------------------------------"
Write-Host " >>>> # Server Version:" $mySitectx.ServerVersion " # <<<<<<" -ForegroundColor Green
Write-Host " ---------------------------------------------------------"
Write-Host " "
Write-host "==================================================================================================="
Write-host " -->> RootSite:", $myCurrentWeb.URL -ForegroundColor green
Write-host "==================================================================================================="
Check-And-Fix-Field-In-SPList $mySitectx $myCurrentWeb
Get-SPOSubWebs $mySitectx $myCurrentWeb
Write-host "==================================================================================================="
Fabrice Romelard
French version:
Source used:
- https://social.technet.microsoft.com/wiki/contents/articles/31151.sharepoint-online-content-types-in-powershell-get.aspx
- https://social.technet.microsoft.com/wiki/contents/articles/31444.sharepoint-online-content-types-in-powershell-edit.aspx
- https://msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.contenttype.aspx
- https://msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.field.aspx
- https://thesharedcontext.wordpress.com/2014/12/11/removing-a-site-column-from-a-content-type-using-the-client-object-model/
- http://www.sharepointdiary.com/2016/08/sharepoint-online-rename-column-using-powershell.html
No RepliesBe the first to reply