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:
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:
SPTimerV4
Dienst stoppenOSearch15
Dienst stoppenSPSearchHostController
Dienst stoppen- Uber Paket installieren
SPSearchHostController
Dienst startenOSearch15
Dienst startenSPTimerV4
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…
[…] bereits in einem vorherigen Beitrag geschrieben, empfiehlt sich bei der Installation von SharePoint Updates ein PowerShell Skript zu […]
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
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.
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