Дэн Холм (danh@intelliem.com) — директор консалтинговой службы Intelliem, которая организовывает консультации для предприятий, внедряющих SharePoint, Office, Windows и Active Directory

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

.

Несколько слов о PowerShell. Я использовал сценарий, который похож на мой сценарий инициализации сайта (http://www.sharepointpromag.com/article/sharepoint/Create-a-SharePoint-Site-Collection-with-Windows-PowerShell-UI-Style) для создания каждого сайта. Завершив работу, я столкнулся с проблемой встроенного Team Site, предоставленного SharePoint.

Теперь я знаю, что самое лучшее – создать пользовательское определение сайта, но время, средства и циклы развертывания не позволяли мне в данном случае сделать это, поэтому мы обратимся к сценариям, которые облегчают процесс тестирования, развертывания и модернизации.

В конце сценария коллекции сайта у нас две переменные: $web и $url. Эти переменные позволяют нам подстраивать все то, о чем говорилось выше. Но если вы хотите работать на существующем сайте, следует определить переменные:

$url = «http://webapp.contoso.com/sites/SiteCollection»
$web = Get-SPWeb –Identity $url

Теперь моя вторая простая задача – задать настройки значка сайта. Здесь я тоже хочу кое-чем поделиться.

Первый секрет для тех, кто будет работать без помощи эксперта. Вам нужно упаковать изменения в пакеты решений SharePoint (wsps) – создайте библиотеку документов, чтобы держать там только связанные с брендом файлы. Затем вы можете обновлять эту библиотеку и синхронизировать ее с профессиональной копией.

Итак, мы начинаем создавать библиотеку, которую назовем SITE BRANDING.

# Create SITE BRANDING document library
$listTemplate=$web.ListTemplates["Asset Library"]
$web.Lists.Add(«Site Branding»,"Library to store branding elements",$listTemplate)

В первую очередь мы создаем ссылку на список шаблонов для библиотеки файлов Asset Library в SharePoint 2010, которая оптимизируется для среды провайдера. Затем мы создаем библиотеку документов, используя метод Add, имеющийся в веб-коллекции Lists.

Затем мы убеждаемся, что наша новая библиотека SITE BRANDING не появляется при быстром запуске (Quick Launch): пользователям не нужно беспокоиться об этом.

# Modify SITE BRANDING document library
$spDocumentLibrary = $web.Lists["Site Branding"]
$spDocumentLibrary.OnQuickLaunch = $false
$spDocumentLibrary.Update()

Мы создаем ссылку на нашу библиотеку, затем настраиваем ее свойство OnQuickLaunch для одного из двух возможных значений логической переменной. Затем мы обновляем объект для сохранения изменений.

Теперь мы готовы загрузить файлы с описанием бренда в библиотеку документов. Вы никогда не использовали PowerShell для загрузки документов в SharePoint? Это легко!

# Upload branding files
$spFolder = $web.GetFolder(«Site Branding»)
$spFileCollection = $spFolder.Files

Мы создаем ссылку на «…». Затем нужно создать папку библиотеки SITE BRANDING – каждая библиотека имеет корневую папку «…» в корневом каталоге. Затем мы создаем ссылку на коллекцию Files в этой папке.

Теперь очередь хитрой загрузки. Мы захватываем профессиональную брендовую папку и – просто как пример – фильтруем так, как будто загружаем файлы JPG.

# Upload multiple files
Get-ChildItem «C:\Users\Dan\Documents\sharepoint\branding» -filter «*.jpg» |
ForEach {
$spFileCollection.Add(«Site Branding/$($_.Name)»,$_.OpenRead(),$true)
}

Затем мы программируем каждую картинку как цикл ForEach, который добавляет файл в коллекцию.

Наконец, мы используем одну из этих картинок в качестве значка сайта.

Это просто вопрос настройки свойства объекта SPWeb, но вычисление займет некоторое время. Если вы хотите, чтобы сценарий работал во всех случаях, вам нужно использовать полностью определенный URL в качестве пути к значку.

# Set website icon
$web.SiteLogoUrl = $web.Url + "/Site Branding/SiteImageIcon.jpg»
$web.Update()

Один маленький секрет: заметьте, я использую картинку, которая имеет очень общее имя. Оно не привязано к определенному времени, месту, компании. Например, картинка не называется «NBC Olympics London 2012 Icon».

Имя будет общее, что позволяет мне легко менять его и обновлять в своей среде. Просто обновите файл SiteImageIcon.jpg во всех библиотеках Site Branding — и все! Желаю удачи в написании сценариев!