Design per PowerShell auf alle Sites in SharePoint anwenden

Heute gibt es einen Beitrag in eigener Sache. Ich musste gerade das Aussehen / Design für alle meine Websitesammlungen inklusive aller dazugehörigen Unterwebseiten ändern. Nachdem das von Hand sehr aufwändig ist also die perfekte Möglichkeit mit PowerShell. Im Dr. Google eingetippt findet man viele Treffer, allerdings in Anbetracht von SharePoint 2013 viele veraltet und viele Skriptbeispiele die schlicht nicht funktionieren, da Microsoft die API geändert hat. Zudem wollte ich:

  • Alle Webseiten auf eines der vordefinierten Standarddesigns ändern (Red)
  • Auf allen Webseiten ein benutzerdefiniertes Logo anzeigen (AvePoint Logo)
  • Auf allen Webseiten ein benutzerdefiniertes Hintergrundbild anzeigen (AvePoint Solutions)
  • Das Skript soll automatisch durch alle Webanwendungen, Websitesammlungen inkl. aller Unterwebseiten gehen und die Einstellungen identisch setzen

Ich habe also ein eigenes Skript erstellt, was die o.g. Anforderungen erfüllt. Ich habe bei mir Microsoft SharePoint 2013 Service Pack 1 als klassische on-premise Installation. Das Skript wird mit Farm Administrator Berechtigungen ausgeführt.

Soll

Im nächsten Screenshot sieht man, wie ich mir das Layout vorstelle:

  • Das Farbschema (Theme) mit dem Namen Red / Rot
  • Das Logo “AvePoint” links oben in der Ecke, anstatt dem Standard SharePoint “S”
  • Das Hintergrundbild “AvePoint Solutions”

image

Der Weg von Hand

Über Websiteeinstellungen – Aussehen ändern kann man sehr komfortabel das neue Design auswählen: image Per Drag and Drop kann man hier das Hintergrund Bild hinzufügen. Das Logo wiederrum muss über Websiteeinstellungen – Titel, Beschreibung und Logo gesetzt werden.

Per PowerShell

Hier das Skript, in den ersten Zeilen stehen alle Variablen die man benötigt, eine davon ist die Design URL (…palette022.spcolor), die kann man in den Websiteeinstellungen – Durchkomponierte Looks (engl. Composed Looks) ansehen: image

Skript

Das Skript wird das definierte Theme in jeder Website anwenden und überschreiben! Man muss bewusst die Webanwendungen angeben, ich habe z.B. die MySite ausgelassen (Variable $WebApps).
Die Logo und Banner liegen als Bilder vor, diese werden per Skript automatisch in jede Websitesammlung (Site Collection) in die “Style Library” hochgeladen und eingecheckt, anschließend wird erst das Aussehen geändert.

# Dennis Hobmaier
# Version 1.0
# 30.12.2014


# Loading Microsoft.SharePoint.PowerShell 
$snapin = Get-PSSnapin | Where-Object {$_.Name -eq 'Microsoft.SharePoint.Powershell'}
if ($snapin -eq $null) {
Write-Host "Loading SharePoint Powershell Snapin"
Add-PSSnapin "Microsoft.SharePoint.Powershell"
}

#Variable Section
$themeName = "Red" #Theme Name which should be applied
$themeRelativeURL = "_catalogs/theme/15/palette022.spcolor"
#$FontRelativeURL = "_catalogs/theme/15/fontscheme004.spfont" #optional, if needed uncomment
#List of all WebApplications where Theme should be changed
$WebApps = @()#Declare array
$WebApps = 'http://intranet', 'http://extranet'


#Don't change beyond this line


#Loop through each Web Application
foreach ($WebApp in $WebApps)
{
    $WebApp = Get-SPWebApplication $WebApp
    Write-Host "Working on WebApp" $WebApp.Url
    #Loop through each Site Collection
    foreach ($SC in $WebApp.Sites)
    {
        Write-Host "Working on Site Collection" $SC.Url
        # Loop through each Web (Subsite), this includes Root Web as well
        foreach ($SPWeb in $SC.AllWebs) 
        {
            Write-Host 'Working on Site' $SPWeb
      
            #Optional - define Font Scheme
            If ($FontRelativeURL -ne $null) { $fontSchemeUrl = [Microsoft.SharePoint.Utilities.SPUrlUtility]::CombineUrl($SC.ServerRelativeUrl, $FontRelativeURL) }
            #Build Site Collection specific Theme URL
            $themeUrl = [Microsoft.SharePoint.Utilities.SPUrlUtility]::CombineUrl($SC.ServerRelativeUrl, $themeRelativeURL)
            # Use Image URL from Site Collection
            $imageUrl = ""

            $SPWeb.allowunsafeupdates = $true
            $SPWeb = Get-SPWeb $SPWeb.Url
            #Now apply Theme
            $SPWeb.ApplyTheme($themeUrl, $fontSchemeUrl, $imageUrl, $true);
            Write-Host "Set" $themeName "at :" $SPWeb.Title "(" $SPWeb.Url ")" 
            #Commit changes
            $SPWeb.Update()
            $SPWeb.allowunsafeupdates = $false

            #Cleanup
            $SPWeb.Dispose()
        }  
    #Cleanup
    $SC.Dispose()
    }
}

 

Download ebenfalls unter: https://github.com/Hobmaier/Scripts/blob/master/SetTheme.ps1
Zur Ausführung sollte das Ganze dann in etwa so aussehen:
image
Viel Spaß bei der Verwendung. Nachdem heute der 30.12.2014 ist, ist das sicherlich der letzte Blog-Eintrag für dieses Jahr. Insofern wünsche ich allen Lesern ein gutes, neues Jahr 2015!

Referenz

 

0 0 votes
Article Rating
Teilen

Autor: Dennis Hobmaier

Dennis Hobmaier ist Consultant - Digital Workspace bei Insight Technology Solutions GmbH. Er hat über 15 Jahre Erfahrung in IT-Enterprise Umgebung aller Größenordnungen und bedient Kunden aus den unterschiedlichsten Branchen. Als MCSE SharePoint hat er tiefgreifende Kenntnisse in den Bereichen Microsoft Active Directory, Windows, Azure, SharePoint und Office 365. Gerne teilt er seine Projekterfahrung mit Ihnen.

Subscribe
Notify of
guest

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahren Sie mehr darüber, wie Ihre Kommentardaten verarbeitet werden .

0 Comments
Inline Feedbacks
View all comments