SharePoint 2010, Powershell - просматривайте все библиотеки документов, создавайте представление и устанавливайте его по умолчанию - PullRequest
3 голосов
/ 02 апреля 2012

У меня небольшие проблемы со сценарием, над которым я работаю для SharePoint 2010. Я новичок в Powershell, поэтому не смог обнаружить, без сомнения, очевидную и явную проблему.

Желание сценария состоит в том, чтобы циклически проходить по каждому веб-сайту в каждом семействе сайтов, создавать представление только для библиотек документов и устанавливать это представление по умолчанию.

Issue 1) В настоящее время кажется, что он перечисляет библиотеки документов, но затем создает представление несколько раз в первой найденной библиотеке. Что-то не так с циклами foreach, но я не знаю, что.

Выпуск 2) Мне нужно интегрировать этот раздел, чтобы я мог установить представление по умолчанию, но я не очень уверен, куда его вставить, чтобы он просматривался с изменениями в каждой библиотеке.

$site= New-Object Microsoft.SharePoint.SPSite $siteURL
$web=$site.OpenWeb()
$list=$web.Lists["$list"]
$view=$list.Views["Detailed"]
$view.DefaultView = $true
$view.Update()
$list.Update()

Любая помощь по этим двум вопросам будет очень полезна :-). Спасибо, Эшли

Полный сценарий:

Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
$siteURL = "http://sp14fdev01/"
$site = Get-SPSite($siteURL)

foreach($web in $site.AllWebs) {
foreach($list in $web.Lists) {
        if($list.BaseType -eq "DocumentLibrary") {

 $site = New-Object Microsoft.SharePoint.SPSite($SiteURL) ;
 $web = $site.OpenWeb($SiteURL);
 $list = $web.Lists.item($listname);

 $viewfields = New-Object System.Collections.Specialized.StringCollection 
 $viewfields.Add("DocIcon") 
 $viewfields.Add("LinkFilename") 
 $viewfields.Add("_UIVersionString") 
 $viewfields.Add("FileSizeDisplay") 
 $viewfields.Add("Created") 
 $viewfields.Add("Modified") 
 $viewfields.Add("Editor") 
 [void]$list.Views.Add("Detailed", $viewfields, "", 100, $true, $true)

 $list.Update();
 }}
 $web.Dispose();
 $site.Dispose();
 }

1 Ответ

3 голосов
/ 02 апреля 2012

Изменения объяснены в комментариях.

Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue

$siteURL = "http://sp14fdev01/"
$site = Get-SPSite($siteURL)

foreach($web in $site.AllWebs) {
  foreach($list in $web.Lists) {
    if($list.BaseType -eq "DocumentLibrary") {
// the variables `$web` and `$list` already reference the objects you need
      //$site = New-Object Microsoft.SharePoint.SPSite($SiteURL) ;
      //$web = $site.OpenWeb($SiteURL);

// new instance of the list is necessary to avoid the error "Collection was modified"
      $newList = $web.Lists.item($list.ID);

      $viewfields = New-Object System.Collections.Specialized.StringCollection 
      $viewfields.Add("DocIcon") 
      $viewfields.Add("LinkFilename") 
      $viewfields.Add("_UIVersionString") 
      $viewfields.Add("FileSizeDisplay") 
      $viewfields.Add("Created") 
      $viewfields.Add("Modified") 
      $viewfields.Add("Editor") 
      [void]$newList.Views.Add("Detailed", $viewfields, "", 100, $true, $true)

      $newList.Update();

// setting the default view
      $view=$newList.Views["Detailed"]
      $view.DefaultView = $true
      $view.Update()
    }
  }

  $web.Dispose();
}

$site.Dispose();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...