Warmup-Scripte sind für SharePoint ein absolutes must-have, denn sie verkürzen die Wartezeit beim Aufrufen von Seiten nach einem Neustart des Servers oder einem Recycling des Application Pools enorm.
Bei SharePoint 2010 (und wahrscheinlich auch bei SharePoint 2013) genügt es meiner bisherigen Erfahrung entsprechend, in einem Warmup-Script das Root-Web jeder Site-Collection einmal aufzurufen. Das explizite Aufrufen anderer Webs einer Site-Collection ist nicht unbedingt nötig - so zumindest meine Erfahrung.
Es gibt viele verschiedene Warmup-Scripte im Internet. Nachdem ich mehrfach gefragt wurde, welches Script ich in meinen Entwicklungsumgebungen verwende, möchte ich mein Script hier vorstellen. Wie gesagt: ich verwende dieses in meinen virtuellen Entwicklungsumgebungen. Für andere Umgebungen sind eventuell noch Anpassungen nötig.
Add-PsSnapin Microsoft.SharePoint.PowerShell -erroraction silentlycontinue
foreach ($site in get-SPSite)
{
$rootweb = $site.RootWeb
WRITE-HOST "Touching RootWeb: " $rootweb.url
$request = [System.Net.WebRequest]::Create($rootweb.URL)
$request.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
$request.proxy = [System.Net.WebRequest]::DefaultWebProxy
$request.ContentType = "application/x-www-form-urlencoded"
$request.Method = "GET"
try
{
$request.GetResponse().StatusCode
}
catch [Net.WebException]
{
$WebExceptionMessage = $_.Exception.Message
WRITE-HOST "Folgender Fehler ist aufgetreten: " + $WebExceptionMessage
}
}
Es macht natürlich wenig Sinn, dieses Script als Administrator aufzurufen. Vielmehr ist es besser, dafür einen eigenen Account zu verwenden. Dazu sind aber noch ein paar zusätzliche Einstellungen nötig:
- der Warmup-Script-Account muss natürlich volle Leserechte haben. Dies stellt man in den User Policies der Web-Anwenungen ein.
- damit dieser Account über das Script auf SharePoint zugreifen darf, benötigt er zusätzlich noch die Rolle “SharePoint_Shell_Access”. Das kann man am einfachsten mit PowerShell erledigen:
foreach ($database in Get-SPContentdatabase) { Add-SPShellAdmin -database $database.id -UserName DOMÄNE\Konto}
- damit dieses Scipt von dem entsprechenden Account auch als geplanter Task ausgeführt werden darf, muss man diesem Account noch das Recht “Log on as batch job” zuweisen. Wo man das macht, zeigt die folgende Abbildung:

Bereitgestellt
20 Jul 2012 10:49
von
Oliver Wirkus