среда, 11 января 2017 г.

Копирование и применение мастер страницы на все сайты веб приложения.

replacement master page across all sites Web application copying master
Думаю, что многие сталкивались с задачей замены мастер страницы в большом количестве сайтов. В моем случае это было порядка 30 коллекций в которых есть под сайты. Если менять страницу руками, то это будет занимать продолжительное время. Поэтому мне было проще написать скрип, который все сделает сам.
Скрипт размещенный ниже обращается в веб приложению, получает все коллекции сайтов. Берет файл из указанной директории, загружает его в каталог и публикует файл.
Далее применяет новую masterpage  для корневого сайта и наследует эту страницу для всех под сайтов.
Как пользоваться:
Нужно заменить значение в переменных:
$docLibraryName
$docLibraryUrlName
$localFolderPath 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
cls
$docLibraryName = "Коллекция главных страниц"     # название библиотеки
$docLibraryUrlName = "_catalogs/masterpage/My"    # расположение папки для загрузки
 
$localFolderPath = "C:\Users\User\Desktop\"       # путь к файлу masterpage
  
 
 
$webApp = Get-SPWebApplication http://web.app.ru/ # web application
 
foreach ($SiteCollection in $webApp.Sites)
{   
 
    Write-Host $SiteCollection.Url
 
    $docLibrary = $SiteCollection.RootWeb.Lists[$docLibraryName]
    write-host $docLibrary
 
    $files = ([System.IO.DirectoryInfo] (Get-Item  $localFolderPath)).GetFiles()
 
    ForEach($file in $files)
    {
 
        if($file.Name.Contains(".master"))
        {
            write-host $file
 
            #Open file
            try
            {
            $fileStream = ([System.IO.FileInfo] (Get-Item $file.FullName)).OpenRead()
 
            #Add file
            $folder $SiteCollection.RootWeb.getfolder($docLibraryUrlName)
 
            write-host "Copying file " $file.Name " to " $folder.ServerRelativeUrl "..."
 
            $SiteCollection.GetFile
 
            $spFile = $folder.Files.Add($folder.Url + "/" + $file.Name,[System.IO.Stream]$fileStream, $true)
            $spFile.Publish("")
            write-host "Success"
 
            #Close file stream
            $fileStream.Close()
            Write-Host "Set masterPage"
            $SiteCollection.RootWeb.MasterUrl =  $SiteCollection.ServerRelativeUrl +"/"+ $docLibraryUrlName+"/" + $file.Name
            $SiteCollection.RootWeb.MasterUrl
            $rootMasterUrl = $SiteCollection.RootWeb.MasterUrl
            $rootSiteLogo = "/_layouts/15/images/logo_clear.png"# $SiteCollection.RootWeb.SiteLogoUrl
               ForEach ($web in $SiteCollection.AllWebs)
               {
                     write-host $web.Url
                   if(($web.Url -eq 'http://site.ru/SearchCenter')-or($web.Url -eq 'http://site/SearchCenter') ) # сайты на которых не нужно применять masterpage
                   {
                        write-host "/SearchCenter"
                   }
                   else
                   {
                    try{
 
                     Disable-SPFeature –identity "MDSFeature" -URL $web.URL -confirm:$false
                     }
                    catch
                    {
                    Write "Error: $file.name: $_" #>>c:\logfile.txt
                        continue;
                    }
 
                      write-host $web.Title $web.Url
                      $web.MasterUrl = $rootMasterUrl   #адрес кастомной страницы в корневом сайте
                      $web.SiteLogoUrl = $rootSiteLogo
                      $web.Update()
   
                   }
                   $web.Dispose()
               }
            }
            catch
            {
            Write "Error: $file.name: $_" >>c:\logfile.txt
                continue;
            }
        }
    }
 
    $SiteCollection.RootWeb.Update()
    $SiteCollection.Dispose()    
}

Комментариев нет:

Отправить комментарий