Adding one field to a SharePoint View in every library in every site Adding one field to a SharePoint View in every library in every site
Adding one field to a SharePoint 84
Share:

Adding a field every SharePoint View

Sometimes one needs to change a SharePoint library view across all libraries and sites. Here’s how to do it. First loop through sites/webs/libraries and find the target libraries. In this example, I use Content Types enabled as one of the criteria. Next, I delete the field I want to add. This is to make the script safe to re-run. If we didn’t try to delete the field first, we would end up with a view with multiple columns for the same field. Note no Update() method is required to alter a View.

#adds "Field" to right  in Default View; deletes field first, in case it already exists, then moves the field into position. 
Add-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue
 
$envrun="Prod"          # selects environment to run in
if ($envrun -eq "Dev")
{
# you can always tune Dev to behave differently.  I prefer to make my scripts multi-environment enabled
}
elseif ($envrun -eq "Prod")
{
$siteUrl = "http ://SharePoint/"  #use ytour site colelction URL, or choose to loop through all site collections
}
else
{
Write-Host "ENVIRONMENT SETTING NOT VALID: script terminating..."
$siteUrl =  $null;
return;
}
 
Write-Host "script starting"
$myheader = "STARTING: $(get-date)"
 
$SiteName=$SiteURL
$rootSite = New-Object Microsoft.SharePoint.SPSite($SiteName)
 
 $site=$rootSite  #skipping traversing all sites for now
 
   Write-Host -foregroundcolor darkblue "$($site.id) - $($site.Url) - $($site.contentdatabase.id) - $($site.contentdatabase.name)"  
 
   $rootWeb = $site.RootWeb
   $web=$rootWeb;
 
   $JPLists=$web.Lists;
   $JPListsCount=$JPLists.Count
 
   for ($i=0;$i -lt $JPListsCount;$i++)
   { 
   $JPLib=$JPLists[$i];
   $A_Lib_Count++;
   $SkipLib=$true; #true
    
   if ( ($JPlib.BaseType -ne "DocumentLibrary") -or ($JPlib.hidden) )
    {
      # forget the rest and return to top
      Write-Host -foregroundcolor green "fast test skipping Library: $($JPlib)";   
      Add-Content $mylogfile "Skipping Library: $($JPlib.title)`n";   
    }
    elseif ($JPLib.Title -Match "SitesAssets|Photo|Image|CustomizedsReports|Templates|Pages|Picture|cache|style|Slide")
    {
      # forget the rest and return to top
      Write-Host -foregroundcolor red "fast test skipping Library because it mentions $Matches: $($JPlib)";   
    }
    elseif ($JPLib.BaseTemplate -ne "DocumentLibrary")   #alternatively, only skip if -eq XMLForm
    {
      # forget the rest and return to top
      Write-Host -foregroundcolor red "fast skipping Library because it is not of base DocumentLibrary, it is BaseType:$($JPlib.basetemplate): $($JPlib.title)";   
    }
    elseif (($JPLib.ThumbnailsEnabled) -or ($JPLib.DefaultView -eq "AllSlides"))
    {
 
      # forget any library with thumbnails, these are not normal doclibs, and return to top
      Write-Host -foregroundcolor red "fast test skipping Library because it has Thumbnails/Slides $($JPlib)";   
    }
    elseif (!$JPLib.ContentTypesEnabled)
    {
      Write-Host -foregroundcolor red "skipping because it does not have CTs enabled: $($JPlib)";   
    }
    else
    {  $SkipLib=$false; }
 
    if (!$SkipLib)
    {
      write-Host -foregroundcolor green "Processing Library: $($JPlib)";   
 
      try
      {
      $ListView = $JPLib.Views["All Documents"];  #This is the one view we are looking for
      }
      catch
      {
      $ListView=$null;
      }
 
      if ($ListView -eq $null)  #let's not try to add a column to a non-existent view.
      {
        continue;
      }
 
      $ListFields=$JPLib.Fields;
      $ListViewFields=$ListView.ViewFields;
 
      #We might have duplicate entries; let's delete them all, then when we add the field, we know there's only one field
      $stillDeleting=$true;
      do {
        try   {$ListViewfields.Delete("LinkFilename")}   #note the use of the internal (static) name whenever deleting 
        catch {$stillDeleting=$false}
      } while ($stillDeleting)
 
      $stillDeleting=$true;   #similar field, just to be sure
      do {
        try   {$ListViewfields.Delete("LinkFilenameNoMenu")}
        catch {$stillDeleting=$false}
      } while ($stillDeleting)
 
 
 
      #Re-add field
      $ListViewFields.add("LinkFilename");
      #Move Field to position #2
      $ListViewFields.MoveFieldTo("LinkFilename",1);
 
      $ListView.Update();  #note no update() method is required
 
    }
}

Leave a Reply

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

Want to talk?

Drop us a line. We are here to answer your questions 24*7.