SharePoint - 如何使用PowerShell实际应用组合外观

时间:2017-06-15 15:33:19

标签: c# powershell sharepoint themes

有许多文章介绍了如何创建SharePoint Composed外观。他们还声称要应用所说的组合外观,但他们实际上只是应用了调色板主题。

Example

使用SPWeb.ApplyTheme()应用主题不应用母版页(仅调色板/字体/徽标)。

有没有办法用powershell或C#应用复合主题?

我已成功应用调色板(使用ApplyTheme()和母版页(使用MasterUrl / CustomMasterUrl)但是当我转到"更改外观"它并不表示正确的组合选择主题(显示选择默认蓝色)。

1 个答案:

答案 0 :(得分:1)

你对所发现的东西绝对正确,我也遇到了同样的事情。基本上你需要更新“当前”组合外观以匹配你通过ApplyTheme()和MasterUrl / CustomMasterUrl应用的Composed Look的字段值:

#Set URL variables
$urlForSite = "https://YourSharePointSite/sites/test"
$themeUrl = "/sites/test/_catalogs/theme/15/YourTheme.spcolor"

#Get the site
$site = Get-SPSite $urlForSite
$relativeUrl = $site.ServerRelativeUrl
if ($relativeUrl -eq "/") {
    $relativeUrl = "" #make sure it doesn't end in a slash
}

#Update the "Current" entry if there is one
$designList = $site.GetCatalog([Microsoft.SharePoint.SPListTemplateType]::DesignCatalog)
$camlQ = New-Object Microsoft.SharePoint.SPQuery
$camlQ.Query = "<Where><Eq><FieldRef Name='Title'/><Value Type='Text'>Current</Value></Eq></Where>"
$items = $designList.GetItems($camlQ)
if ($items.Count -eq 1) {
    $item = $items[0]
    $item["MasterPageUrl"] = $relativeUrl + "/_catalogs/masterpage/seattle.master"
    $item["ThemeUrl"] = $themeUrl
    #Include these if you need to
    #$item["ImageUrl"] = ?
    #$item["FontSchemeUrl"] = ?
    $item.Update()
}

#Dispose because you know you should
$site.Dispose()

我还发现,当您通过UI中的“更改外观”选项应用组合外观时,在生成预览时/之后,它似乎使用DesignPreviewSaveData类: https://msdn.microsoft.com/en-us/library/office/microsoft.sharepoint.utilities.designpreviewsavedata_properties.aspx

生成此预览时,会有两个属性添加到SPWeb的属性包中:

  • DesignPreviewLayoutUrl
  • DesignPreviewThemedCssFolderUrl

我发现我不需要更新这些属性,但您可能只想执行与UI过程相同的步骤。