Devin W.C. Ryan

SharePoint List – Delete Columns Through PowerShell

Today my colleague ran into an issue where she added columns to a SharePoint 2013 list, later realised they were not what she wanted and was unable to delete them.

I ended up doing up the following PowerShell script to delete the columns based on some examples I found online in both C# and PowerShell.  The key one I found was on SharePoint Diary; however, this did not work for me but was close to what I had already started.

The full script that worked for me is as follows:

#Variables
$SiteURL="http://foundations.thrive"
$ListName="Activity Reporting - 2018"
$ColumnName="Target Audiences"

Write-Host $ListName - $ColumnName
#Get Internal Name of the columns
$web = Get-SPWeb $SiteURL
 
#Get the list
$list = $web.Lists.TryGetList($ListName)
 
if($List -ne $null)
{
    #Get the column
    $column = $list.Fields[$ColumnName]
 
    if($column -ne $null)
    {
        #Reset column properties to allow delete
	$column.Sealed = $false
        $column.ReadOnlyField = $false
        $column.AllowDeletion = $true
        $column.Update()

        #Delete the column from list
        $list.Fields.Delete($column.InternalName)
        write-host "Column has been deleted!" -f Green
    }
    else
     {
        write-host "Specified column name not found!" -ForegroundColor Red
     }
}

The key difference from theirs is the column properties I had to set.  Setting the columns Hidden property:

$column.Hidden = $false

Didn’t work for me and I had to replace it with:

$column.Sealed = $false

This might depend on the type of column you are having issues with, but since I we were unable to delete these through the GUI this is what I ended up doing but wanted to document the other way as well encase down the road we run into a scenario that fits there original use case.

2 thoughts on “SharePoint List – Delete Columns Through PowerShell”

  1. Hi there,

    I am getting the following error:
    You cannot call a method on a null-valued expression.
    At line:10 char:1
    + $list = $web.Lists.TryGetList($ListName)
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    Do you know how it can be solved?

    1. Hi Albert,

      You need to make sure that the $SiteUrl and $ListName for your environment are correct. If you check the $web variable after the intialization line (line #8), is it $null or does it contain a reference to a SP Web?

Leave a Comment

Your email address will not be published. Required fields are marked *