SharePoint 2013 Updates richtig installieren

Die Installation von SharePoint 2013 Cumulative Updates (CU) ist leider nicht ganz trivial. Deshalb ist das Thema auch meistens ziemlich unbeliebt und wird leider teilweise auch komplett ignoriert. Allerdings ist ein aktuelles System absolute Pflicht, um kritische Sicherheitslücken zu stopfen und bestehende Fehler in der Anwendung selbst zu beseitigen. Darum möchte ich euch heute ein paar Stolpersteine bei der Aktualisierung zeigen und wie man diese erfolgreich umgehen kann.

Als erster Schritt für die Aktualisierung von SharePoint 2013 benötigt man das entsprechende CU Paket von Microsoft. Dieses erscheint momentan immer noch zum Microsoft Patchday, also am zweiten Dienstag in jedem Monat. Das CU wird als sogenanntes Uber Paket bereitgestellt. Ein Uber Paket besteht nicht nur aus dem CU, sondern auch aus den Public Updates (PU). PUs sind auch CUs, allerdings mit dem Unterschied, dass diese für alle Kunden relevant sind. Ein CU kann weitere Aktualisierungen enthalten, die nur spezielle Kunden betreffen, wie z.B. das Bugfixing von Fehlern. Das ganze Konstrukt sieht grafisch aufbereitet so aus:

Updates
Wenn einem dieser Zusammenhang klar ist, geht es an die eigentliche Installation des Updates. Dabei ist noch zu beachten, dass die Installation immer zuerst auf einem Testsystem erfolgen sollte. Und man sollte doch eine gewisse Zeit abwarten, nachdem die Updates veröffentlicht wurden, um mögliche schwerwiegende Fehler ausschließen zu können.

Man kann zwar einfach die EXE-Datei einfach auf allen SharePoint Servern in der Farm ausführen, allerdings wird man merken, dass die Installation der Updates auf einem Server mit aktivem Suchdienst wesentlich länger dauert. Dies ist „normal“, ist aber nicht sehr vorteilhaft wenn man eine möglichst geringe Downtime haben möchte (was wohl der Standard ist). Deshalb sollte man folgende Reihenfolge bei der Installation von Updates einhalten:

  1. SPTimerV4 Dienst stoppen
  2. OSearch15 Dienst stoppen
  3. SPSearchHostController Dienst stoppen
  4. Uber Paket installieren
  5. SPSearchHostController Dienst starten
  6. OSearch15 Dienst starten
  7. SPTimerV4 Dienst starten

Möchte man den ganzen Vorgang lieber automatisiert ausführen, gibt es hierfür auch das entsprechende PowerShell Skript. Zum Ausführen muss das Skript nur in den Ordner kopiert werden, wo auch das Uber Paket liegt.

<# ============================================================== 
  // 
  // Microsoft provides programming examples for illustration only, 
  // without warranty either expressed or implied, including, but not 
 // limited to, the implied warranties of merchantability and/or 
  // fitness for a particular purpose. 
  // 
  // This sample assumes that you are familiar with the programming 
  // language being demonstrated and the tools used to create and debug 
  // procedures. Microsoft support professionals can help explain the 
  // functionality of a particular procedure, but they will not modify 
  // these examples to provide added functionality or construct 
  // procedures to meet your specific needs. If you have limited 
  // programming experience, you may want to contact a Microsoft 
  // Certified Partner or the Microsoft fee-based consulting line at 
  //  (800) 936-5200 . 
  // 
  // For more information about Microsoft Certified Partners, please 
  // visit the following Microsoft Web site: 
  // https://partner.microsoft.com/global/30000104 
  // 
  // Author: Russ Maxwell () 
  // 
  // ---------------------------------------------------------- #> 

 

########################### 
 ##Ensure Patch is Present## 
 ########################### 
 $patchfile = Get-ChildItem | where{$_.Extension -eq ".exe"} 
 if($patchfile -eq $null) 
 { 
  Write-Host "Unable to retrieve the file.  Exiting Script" -ForegroundColor Red 
  Return 
 } 


######################## 
 ##Stop Search Services## 
 ######################## 
 ##Checking Search services## 
 $srchctr = 1 
 $srch4srvctr = 1 
 $srch5srvctr = 1 

$srv4 = get-service "OSearch15" 
 $srv5 = get-service "SPSearchHostController" 

If(($srv4.status -eq "Running") -or ($srv5.status-eq "Running")) 
  { 
    Write-Host "Choose 1 to Pause Search Service Application" -ForegroundColor Cyan 
    Write-Host "Choose 2 to leave Search Service Application running" -ForegroundColor Cyan 
    $searchappresult = Read-Host "Press 1 or 2 and hit enter"  
    Write-Host 
    

   if($searchappresult -eq 1) 
    { 
        $srchctr = 2 
        Write-Host "Pausing the Search Service Application" -foregroundcolor yellow 
        Write-Host "This could take a few minutes" -ForegroundColor Yellow 
        $ssa = get-spenterprisesearchserviceapplication 
        $ssa.pause() 
    } 
    

    elseif($searchappresult -eq 2) 
    { 
        Write-Host "Continuing without pausing the Search Service Application" 
    } 
    else 
    { 
        Write-Host "Run the script again and choose option 1 or 2" -ForegroundColor Red 
        Write-Host "Exiting Script" -ForegroundColor Red 
        Return 
    } 
  } 

Write-Host "Stopping Search Services if they are running" -foregroundcolor yellow 
 if($srv4.status -eq "Running") 
  { 
    $srch4srvctr = 2 
    set-service -Name "OSearch15" -startuptype Disabled 
    $srv4.stop() 
  } 

if($srv5.status -eq "Running") 
  { 
    $srch5srvctr = 2 
    Set-service "SPSearchHostController" -startuptype Disabled 
    $srv5.stop() 
  } 

do 
  { 
    $srv6 = get-service "SPSearchHostController" 
    if($srv6.status -eq "Stopped") 
    { 
        $yes = 1 
    } 
    Start-Sleep -seconds 10 
  } 
  until ($yes -eq 1) 

Write-Host "Search Services are stopped" -foregroundcolor Green 
 Write-Host 

 

####################### 
 ##Stop Other Services## 
 ####################### 
 Set-Service -Name "IISADMIN" -startuptype Disabled 
 Set-Service -Name "SPTimerV4" -startuptype Disabled 
 Write-Host "Gracefully stopping IIS W3WP Processes" -foregroundcolor yellow 
 Write-Host 
iisreset -stop -noforce 
 Write-Host "Stopping Services" -foregroundcolor yellow 
 Write-Host 

$srv2 = get-service "SPTimerV4" 
  if($srv2.status -eq "Running") 
  {$srv2.stop()} 

Write-Host "Services are Stopped" -ForegroundColor Green 
 Write-Host 
 Write-Host 

 

################## 
 ##Start patching## 
 ################## 
 Write-Host "Patching now keep this PowerShell window open" -ForegroundColor Magenta 
 Write-Host 
 $starttime = Get-Date 

$filename = $patchfile.basename     

Start-Process $filename 

Start-Sleep -seconds 20 
 $proc = get-process $filename 
 $proc.WaitForExit() 

$finishtime = get-date 
 Write-Host 
 Write-Host "Patch installation complete" -foregroundcolor green 
 Write-Host 

 

################## 
 ##Start Services## 
 ################## 
 Write-Host "Starting Services Backup" -foregroundcolor yellow 
 Set-Service -Name "SPTimerV4" -startuptype Automatic 
 Set-Service -Name "IISADMIN" -startuptype Automatic 

##Grabbing local server and starting services## 
 $servername = hostname 
 $server = get-spserver $servername 

$srv2 = get-service "SPTimerV4" 
 $srv2.start() 
 $srv3 = get-service "IISADMIN" 
$srv3.start() 
 $srv4 = get-service "OSearch15" 
 $srv5 = get-service "SPSearchHostController" 

###Ensuring Search Services were stopped by script before Starting" 
 if($srch4srvctr -eq 2) 
 { 
    set-service -Name "OSearch15" -startuptype Automatic 
    $srv4.start() 
 } 
 if($srch5srvctr -eq 2) 
 { 
    Set-service "SPSearchHostController" -startuptype Automatic 
    $srv5.start() 
 } 

###Resuming Search Service Application if paused### 
 if($srchctr -eq 2) 
 { 
    Write-Host "Resuming the Search Service Application" -foregroundcolor yellow 
    $ssa = get-spenterprisesearchserviceapplication 
    $ssa.resume() 
 } 

Write-Host "Services are Started" -foregroundcolor green 
 Write-Host 
 Write-Host 
 Write-Host "Script Duration" -foregroundcolor yellow 
 Write-Host "Started: " $starttime -foregroundcolor yellow 
 Write-Host "Finished: " $finishtime -foregroundcolor yellow 
 Write-Host "Script Complete"

Nachdem das Uber Paket erfolgreich auf allen Servern in der SharePoint Farm installiert wurde, muss noch PSConfig auf jedem Server manuell ausgeführt werden. Dabei sollte man mit dem Anwendungsserver beginnen, auf dem auch die Zentraladministration ausgeführt wird. Die PSConfig.exe befindet sich im Verzeichnis C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\BIN.

Die PSConfig muss noch mit einigen Parametern gefüttert werden, damit eine Aktualisierung durchgeführt wird:

PSConfig.exe -cmd upgrade -inplace b2b -wait -cmd applicationcontent -install -cmd installfeatures -cmd secureresources

Die genaue Beschreibung zur Nutzung von PSConfig findet man im TechNet. Wobei zu beachten ist, welche Operationen (-cmd) für die Installation der Updates wirklich notwendig sind. Bei der Nutzung von PSConfig.exe ist man für die richtigen Parameter selbst verantwortlich. Dies hat in jüngster Vergangenheit zu einigen Problemen geführt, über die ich bereits hier berichtet habe. Deshalb empfiehlt es sich, die PSConfigUI.exe zu nutzen. Dies ist das grafische Pendant zu PSConfig.exe. Allerdings hat dies den enormen Vorteil, dass man für die richtigen Parameter nicht mehr selbst verantwortlich ist, sondern automatisch die notwendigen Schritte für die Updates ausgeführt werden. Die PSConfigUI.exe versteckt sich außerdem auch hinter dem SharePoint Konfiguration Wizard, der bei der Installation im Programm Menü hinzugefügt wird. Mehr Informationen dazu findet man auch im Blog von Stefan Goßner.

Ist man allerdings auf die Nutzung von PSConfig.exe angewiesen, muss man zwingend die oben genannten Parameter nutzen. Ansonsten kann es zu Problemen kommen, weil die Updates nur unvollständig installiert wurden.

Mit diesen Informationen steht der Installation von Updates in eurer SharePoint Farm nichts mehr im Wege.

In diesem Sinne, Happy SharePointing…

7 Kommentare

  1. Hallo,

    wir setzen bei uns im Betrieb Sharepoint 2013 als Intranet ein. Jetzt hab ich zwei Probleme, die ich leider nicht
    gelöst bekomme. Zum einen ist so, dass die aktuell bei uns eingesetzte Sharepoint Version die 15.0.4569.1506, die aktuellste von Microsoft
    freigegebene Version ist aber mittlerweile 15.0.5023.1000. Wenn ich mir das Uber-Paket downloade und installieren will
    erscheint immer folgende Fehlermeldung: Fehler beim Ausführen der Erkennung.
    Wir setzen den Sharepoint in der Enterprise Version ein. Ich habe schon beide Updates, auch das für Foundation zur Installation geladen,
    aber auch das brachte keinen Erfolg. Weiß hier möglicherweise wer woran das liegen kann und wie ich das löse?

    Zweites Problem.
    Formulare werden bei uns mit Infopath erstellt. Jetzt hatte ich eine Liste angelegt, bei der ein Datum ausgewählt werden kann
    und eine Zahl eingetragen werden muss. Wenn ich das Formular in der Vorschau ausprobiere kann ich das Datum auswählen, sobald
    ich aber das Formular veröffentliche und das Datum im Sharepoint auwählen möchte macht es mir dieses Kontextmenü gar nicht auf.
    Beim Zahlenfeld ist es so, dass ich zwar eine Zahl eintragen kann und das Formular auch speichern kann, aber in der Liste wird
    der Zahlenwert nicht gesichert.
    Leider weiß ich mir auch hierzu keinen Rat.

    • Hallo Hannes,
      wurde der SharePoint 2013 bereits mit SP1 installiert? Weil die momentane Versionsnummer ist vom „kaputten“ SP1. Ich würde versuchen zuerst das SP1 noch einmal zu installieren, bevor ein CU installiert wird.

      Viele Grüße
      Frank

  2. Hallo,

    danke fürs Feedback.
    Ich hab bereits versucht, das neue SP1 zu installieren, es tritt jedoch die selbe Fehlermeldung auf.
    Liegt es vielleicht daran, dass ich Sharepoint inkl. dem „falschen“ SP1 über eine ISO installiert habe?

    • Hallo,
      wenn Du den SharePoint mit SP1 als ISO installiert hast, ist alles in Ordnung. Das „falsche“ SP1 hat man nur, wenn man dieses nachträglich installiert hat.
      Was sagt denn das Installationslog (Müsste OPatchInstall(1).log heißen)? Das solltest Du finden, wenn Du im Windows Explorer %tmp% eingibst.

  3. Hallo Frank,
    super Anleitung! Allerdings habe ich ein Problem. ich wollte das ganze erst einmal mit der SharePoint Foundation in einer Laborumgebung testen. Dabei viel mir auf, dass ich im Task-Planer das Script nicht zum Laufen bekam. Ich musste auch die Auswahl 1 bestätigen, damit der Search-Service beendet wird. Eigentlich sollte das Ganze über nacht laufen.
    Wenn ich es mit der Powershell ISE aufrufe, startet das Script. allerdings muss ich dann in der GUI bestätigen, dass ich mit der EULA einverstanden bin – als manuell ein Häkchen setzen.
    Kann man das umgehen?
    Gruß Matthias

    • Hallo Matthias,
      du meinst die EULA vom CU?
      Theoretisch kann man das umgehen, in dem man in Zeile 141 noch das /passive Argument mit übergibt. Also $arg = "/passive"; Start-Process $filename $arg.
      So war das Script auch initial gebaut, allerdings kann es dann passieren, dass es zu Fehlern bei der Installation kommt, wenn man den passive Switch nutzt.
      Viele Grüße
      Frank

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert