2012-08-16 57 views
1

此脚本应循环遍历每个站点上的每个文档库,并将名为“CheckoutUser”的viefield添加到默认视图。 问题在于脚本仅将字段添加到每个站点中的第一个库,跳过所有其他库并继续到下一个站点。为每个库视图添加新视区的SharePoint 2010循环

我需要解决这个问题, 感谢帮助,安娜

$site = Get-SPSite "http://sharepoint" 

$site | Get-SPWeb -limit all | ForEach-Object { 

    $_.Lists | where {$_.BaseType -eq "DocumentLibrary"} | ForEach-Object { 

     $view = $_.DefaultView 

     $view.ViewFields.add("CheckoutUser") 

     $view.Update() 
    } 
} 

$site.Dispose() 

回答

1

试试这个:

$site = Get-SPSite "http://sharepoint" 
$column = "CheckoutUser" 

$site | Get-SPWeb -limit all | ForEach-Object { 

    # Get all document libraries 
    $lists = $_.Lists | where {$_.BaseType -eq "DocumentLibrary"} 

    # Loop libraries 
    for ($i = 0; $i -lt $lists.Count; $i++) 
    { 
     try 
     { 
      # Get current view 
      $view = $lists[$i].DefaultView 

      if($view) 
      { 
       # Delete if already exist 
       while($view.ViewFields.ToStringCollection().Contains($column)) 
       { 
        $view.ViewFields.delete($column) 

        $view.Update() 
       } 

       # Add column 
       if(!$view.ViewFields.ToStringCollection().Contains($column)) 
       {  
        $view.ViewFields.add($column) 

        $view.Update() 
       } 
      } 
     } 
     catch [Exception] 
     { 
      write-output (" Error: " + $_.Exception.ToString()) 
     } 
    } 
} 

$site.Dispose()