Дэн Холм (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 — и все! Желаю удачи в написании сценариев!