Я часто произвожу различные манипуляции с SharePoint при помощи PowerShell. В этой статье я хотел бы рассказать про манипуляции с веб частями.

Скажу сразу, в таком подходе я вижу следующие возможности:

  1. Массовое применение настроек веб частей на различных страницах и сайтах
  2. Реверс инжиниринг, исследование внутреннего устройства
  3. Отладка и диагностика в проектах
  4. Инвентаризация использования веб частей на страницах

Для программной работы с веб частями в SharePoint имеется специальный класс SPLimitedWebPartManager - http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.webpartpages.splimitedwebpartmanager.aspx. При помощи него можно перечислять, добавлять, удалять, изменять и соединять веб части на страницах сайтов.

 

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

$web = Get-SPWeb "http://portal/search"

$scope = [System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared

$wpm = $web.GetLimitedWebPartManager("pages/results.aspx", $scope)

$wps = $wpm.WebParts | select Title, @{Name = "Type"; Expression = {$_.GetType()}} | Out-GridView

 

Вот результат:

 

Как выяснить, какие настройки имеются у той или иной веб части на странице? Меня в данном случае интересует веб часть «Ссылки действий поиска».

Добавим следующий код в конец того, что уже написали:

$wp = $wpm.WebParts | ? {$_.Title -eq "Ссылки действий поиска"}

$wp

 

Получается примерно следующий вывод (большинство свойств убраны для наглядности):

Location : LocalSearchIndex

DefaultSort : Relevance

ShowSearchResults : False

ShowActionLinks : True

ShowWindowsSearch : True

DisplayAlertMeLink : True

DisplayRSSLink : True

QueryNumber : Query1

UseLocationVisualization : True

Title : Ссылки действий поиска

FrameType : None

ZoneID : MidLowerRightZone

PartOrder : 1

ChromeType : None

 

Допустим, я хочу запретить пользователям подписываться на результаты поиска. Для этого мне нужно извлечь файл (по умолчанию включено в центре поиска), изменить свойство и вернуть файл с комментариями.

Что было:

Выполняем код:

$web = Get-SPWeb "http://portal/search"

$scope = [System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared

 

$page = $web.GetFile("pages/results.aspx")

$page.CheckOut()

 

$wpm = $web.GetLimitedWebPartManager("pages/results.aspx", $scope)

$wps = $wpm.WebParts | select Title, @{Name = "Type"; Expression = {$_.GetType()}} #| Out-GridView

$wp = $wpm.WebParts | ? {$_.Title -eq "Ссылки действий поиска"}

 

$wp.DisplayAlertMeLink = $true

$wpm.SaveChanges($wp)

 

$page.CheckIn("")

 

Стало:

 

Стоит отметить, что такие манипуляции можно делать также и из кода на .NET, а также то, что это будет работать только на свойствах с общей персонализацией.

 

Ну и наконец, когда Вы настроите веб часть, то ее можно экспортировать в файл, а потом импортировать настроенную веб часть на другой сайт или в проект Visual Studio.

$enc = [System.Text.Encoding]::UTF8

[System.Xml.XmlTextWriter]$writer = New-Object -TypeName "System.Xml.XmlTextWriter" -ArgumentList "c:\wp.txt", $enc

$writer.Indentation = 1

$writer.IndentChar = " "

$writer.Formatting = [System.Xml.Formatting]::Indented

$wpm.ExportWebPart($wp, $writer)

$writer.Close()

 

Удачи с веб частями!