Думаю, что многие сталкивались с задачей замены мастер страницы в большом количестве сайтов. В моем случае это было порядка 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()
}
Комментариев нет:
Отправить комментарий