Eliminar una columna de todas las listas via Power Shell

Puede ocurrir que al crear una Site Column y agregarla a un Content Type, nos hayamos equivocado en algún parámetro (el campo Required, por ejemplo). Hemos decidido borrar la columna y para ello la borramos del Content Type y procedemos a eliminarla de las columnas de sitio.

No obstante, si tenemos listas que utilicen ese content type, nuestra columna ya ha sido creada en todas ellas, y no se eliminan sino que quedan “huérfanas”. Si volvemos a crear la columna (hablamos siempre de SharePoint Management Shell), cuando se añada al Content Type y se reproduzca de nuevo en nuestras listas, al existir todavía la anterior, se creará con el mismo Nombre de columna pero con diferente nombre interno, lo que puede afectar posteriormente si utilizamos esa columna en nuestros desarrollos custom.

Para salir de esta situación, una vez ya hemos eliminado la Site Column, no nos queda más remedio que borrar esa columna de todas las listas afectadas. Aqui os dejo un ejemplo con el que tuve que lidiar en un Content Type utilizado en todas las librerías de páginas de una site collection, utilizando SharePoint Management Shell:

$spsite = Get-SPSite "http://YOUR_SITE"
foreach ($web in $spsite.AllWebs)
{
  $splist = $web.Lists["Pages"]
  "-----";
  $web.Title
  "-----"
  foreach ($spfield in $splist.Fields)
  {
    if($spfield.Title -like 'COLUMN_NAME*'){
      " Trying to remove: " + $spfield.Title + "..."
      $splist.Fields.Delete($spfield)
      " " + $spfield.Title + " removed";
    }
  }
}
$spsite.dispose()

Os recomiendo que primero lo ejecutéis comentando la linea que elimina la columna para aseguraros de que eliminará solo lo que necesitéis.

Leave a Reply

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.