Думаю, что многие сталкивались с задачей замены мастер страницы в большом количестве сайтов. В моем случае это было порядка 30 коллекций в которых есть под сайты. Если менять страницу руками, то это будет занимать продолжительное время. Поэтому мне было проще написать скрип, который все сделает сам.
Далее применяет новую masterpage для корневого сайта и наследует эту страницу для всех под сайтов.
Как пользоваться:
Нужно заменить значение в переменных:
$docLibraryName
$docLibraryUrlName
$localFolderPath
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() }
Комментариев нет:
Отправить комментарий