В предыдущей статье рубрики мы рассмотрели основы применения PowerShell в составе набора инструментов администрирования. Помимо использования PowerShell для администрирования, иногда его требуется применять для установки, настройки и общего обслуживания среды SharePoint.

Большинство элементов внутри SharePoint можно настраивать, направлять к ним запросы и обновлять с помощью PowerShell. Иногда возникает необходимость экспортировать все списки сайтов SharePoint для какого-нибудь процесса.

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

После того как свойства заданы в программном коде, мы просто входим в цикл, определенный как ForEach. Этот тип программирования не является специфическим для SharePoint, но принадлежит PowerShell. Однако для безупречной работы необходимо загрузить оснастку PowerShell для SharePoint. Это можно сделать двумя способами.

Вариант 1

[System.Reflection.Assembly]::
   LoadWithPartialName
("Microsoft.SharePoint")
[System.Reflection.Assembly]::
   LoadWithPartialName
("Microsoft.SharePoint.Deployment")

Вариант 2

Add-PSSnapin
   "Microsoft.SharePoint.PowerShell"

После того как оснастка загружена, можно построить цикл для итерации по сайтам (см. листинг 2).

Теперь у нас имеется основной цикл и мы можем добавить любой код, позволяющий экспортировать (см. листинг 3), импортировать, добавлять, обновлять или удалять элементы.

Приведенный в листинге 3 код PowerShell обращается к сайту, получает список, а затем, используя встроенную функцию экспорта (https://msdn.microsoft.com/fr-fr/library/microsoft.sharepoint.deployment.spexport(v=office.14).aspx) SharePoint, передает его в файл с расширением bak.

Вам может понадобиться добавить учетные записи одного или нескольких пользователей в группы. Это можно сделать из пользовательского интерфейса; но если такую задачу приходится выполнять ежечасно, то сценарии будут очень кстати. Чтобы добавить учетные записи пользователей в группы узла SharePoint с применением PowerShell, необходимо в первую очередь решить, будет это один или несколько пользователей. В данном примере мы добавляем нескольких учетных записей пользователей в SharePoint.

Сначала нужно было загрузить оснастку PowerShell SharePoint; затем можно определить необходимые переменные.

$SiteUrl = “SharePoint URL”
$SiteGroup = “Site Group”
$UserList = Get-Content
   “Path\UserAccounts.txt”

После того как заданы значения, мы организуем цикл на основе URL-адреса веб-сайта, используемого для чтения контента. Затем следует вызов EnsureUser (https://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spweb.ensureuser.aspx), чтобы создать учетную запись пользователя. Далее из цикла вызывается встроенная функция Set-SPUser (https://technet.microsoft.com/en-us/library/ff607827 (v=office.15).aspx) для определения значений свойств.

$web = Get-SPWeb - Identity $SiteUrl
foreach($NewUser in $AllNewUsers) {
            $web.EnsureUser($NewUser)
Set-SPUser -Identity $NewUser
   -Web $SiteUrl -Group $SiteGroup
}

Теперь можно не только экспортировать все списки, но и добавлять учетные записи нескольких пользователей. Это прекрасно, но еще лучше иметь возможность применять PowerShell для диагностики неисправностей и проблем SharePoint. Если, как и я, вы проводили часы, дни и даже недели в поисках журнала ULS, просто чтобы узнать идентификатор корреляции Correlation ID, то позвольте предложить вам способ сэкономить время.

Прежде всего, загрузите средство просмотра единой службы ведения журналов (ULS), если вы его еще не использовали. На сегодня для него не требуется никаких пояснений, достаточно отметить, что его следует связать с расположением ваших файлов журналов (http://www.microsoft.com/en-us/download/details.aspx? id=44020)

Далее просто запустите средство после загрузки на SharePoint Server и выберите меню File (см. экран 1).

 

Начало работы
Экран 1. Начало работы

Выберите пункт ULS из подменю. Вы увидите (и сможете проверить) расположение журнала ULS (см. экран 2).

 

Выбор журнала
Экран 2. Выбор журнала

После проверки нажмите кнопку OК. В результате должна быть выполнена загрузка непосредственно из журналов ULS. После завершения загрузки можно использовать параметры фильтрации, чтобы найти идентификатор корреляции или другое значение либо свойство (см. экран 3).

 

Работа с фильтрами
Экран 3. Работа с фильтрами

С помощью этого метода весь журнал фильтруется в поисках выбранного идентификатора корреляции (см. экран 4).

 

Поиск идентификатора
Экран 4. Поиск идентификатора

Загрузите средство просмотра ULS, а затем откройте файлы журналов и назначьте фильтр. Если вы не хотите этого делать или существуют ограничения по установке и запуску программ на сервере, то можно использовать испытанный PowerShell. Введем команду Merge-SPLogFile (https://technet.microsoft.com/en-us/library/ff607721.aspx), передающую тот же идентификатор корреляции. В PowerShell это простая однострочная команда, которая выполнит поиск конкретного идентификатора в файлах журналов. После этого в файл журнала на сервере выводятся только нужные записи.

Merge-SPLogFile -Path
   -Correlation “Correlation ID”
Merge-SPlogfile -Path
   “Path\log.log” -Correlation
c271359d-7186-c031-abe7-0566c-755759e

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

PowerShell — превосходный инструмент, который можно использовать для любых задач администрирования SharePoint.

Листинг 1. Задание значений свойств
$versions = [Microsoft.SharePoint.Deployment.SPIncludeVersions]::All

$exportObject = New-Object Microsoft.SharePoint.Deployment.SPExportObject

$exportObject.Type = [Microsoft.SharePoint.Deployment.SPDeploymentObjectType]::List

$exportObject.IncludeDescendants = [Microsoft.SharePoint.Deployment.SPIncludeDescendants]::All

$settings = New-Object Microsoft.SharePoint.Deployment.SPExportSettings

$settings.ExportMethod = [Microsoft.SharePoint.Deployment.SPExportMethodType]::ExportAll

$settings.IncludeVersions = $versions

$settings.IncludeSecurity = [Microsoft.SharePoint.Deployment.SPIncludeSecurity]::All

$settings.OverwriteExistingDataFile = 1

$settings.ExcludeDependencies = $true

sharepointpsscripts.codeplex.com
Листинг 2. Цикл для итерации по сайтам
$SharePointSite = new-object Microsoft.SharePoint.SPSite(“SharePoint URL”)
$web = $site.OpenWeb()
            foreach($list in $web.lists)
            {
                        // Здесь код для экспорта
            }
            $web.Dispose()
            $site.Dispose()
Листинг 3. Код для экспорта элементов
$settings.SiteUrl = $web.Url
$exportObject.Id = $list.ID
$newFolderPath = $ExportRootPath + $list.Title
New-Item $newFolderPath -type directory -force
$settings.FileLocation = $newFolderPath
$settings.BaseFileName = $list.ID.ToString() + “_Extracted” +".bak"
$settings.FileCompression = 1
$settings.ExportObjects.Add($exportObject)
$export = New-Object Microsoft.SharePoint.Deployment.SPExport($settings)
$export.Run()