EMMDoubleTagI’ve been fighting an interesting issue lately where some hidden taxonomy columns are becoming visible.  In this environment, there are simple custom content types with some custom site columns, a few of which are managed metadata columns.  The issue is that what seems randomly, some strange fields suddenly show up in the library columns, and on the list forms:

Why Do Hidden Taxonomy Catch All Columns Become Visible?

Oh the humanity!  First off, what are these fields?  MVP Andrew Connell gives a great deep dive into these fields in this blog post, so I won’t bother to rehash that here.   Look in the Site Columns section. 

Why does this happen?

This TechNet forum post provided a clue that I could conclude, as well as provide a basic fix.  One poster seemed to indicate that the cause had to do with using Content & Structure.  I thought back, and then was able to confirm that on my sites using custom site templates, I just used Content & Structure to move a file form one library to another library on the same site (that had metadata columns).  After the copy finished, the hidden columns showed up.  So just be aware.

The Fix

Now, let’s take care of this before the users get really confused and start submitting helpdesk tickets!  Of course we turn to our dear friend PowerShell.  In the post, they give a simple version to hide each field one by one.  I wanted to beef it up a little and make it easier to run repeatable.  We use an array to get a list of the fields, and then pipe that into a loop to hide them. 

$web = Get-SPWeb <web url>
$list = $web.Lists["<library name>"]
$fieldstoupdate = @("Phase_0","TaxKeywordTaxHTField","Taxonomy Catch All Column","Category Metadata_0","Taxonomy Catch All Column1") #ENTER THE LIST OF FIELDS TO BE HIDDEN

if($list -ne $null) {
        Write-host -f black "List"$list.Title "on"$web.Name "at URL"$web.Url
        
        #GET ARRAY OF FIELDS TO UPDATE
        foreach ($field in $fieldstoupdate) {
            $fieldname = $list.Fields["$field"]
            $fieldname.Hidden = $true
            $fieldname.update()
            Write-Host -f green "Updated field"$fieldname
        }
}
else {
        Write-Host -f red $listName "does not exist in the subsite"$web.Name", skipping"
}

$list.Update()
$web.Dispose()


If you have any questions regarding this post or C5 Insight's services and solutions, please contact us.