Inutile de présenter ce qu’est le warmup, chaque SharePointeur en aura fait les frais après avoir lancé un IISReset ou simplement en étant le premier à appeler une page SharePoint le matin. Il y a nombre de différentes techniques qui vont de bon vieux scripts VBS à des solutions plus complexes comme des addons IIS ou des scripts PowerShell.
Mais c’est en diagnostiquant une ferme SharePoint chez un client que j’ai découvert une solution qui m’a le plus plus : lancer le WarmUp en connectant une tâche planifiée aux événements Windows.
Pour ce faire, c’est très simple ! Pour commencer, on va créer une tâche qui, ici, lancera du PowerShell (car PowerShell is good!) :

Ensuite, il faut créer un Trigger. Habituellement, c’est ici qu’on spécifie une planification telle que “tous les jours, à 6h du matin”. Dans notre cas, on spécifie que le Trigger sera un événement.

Pour trouver lequel, lançons la commande “iisreset” et voyons ce qui est tracé :

Le journal System a tracé deux événements de la source “IIS-IISReset” avec des ID différents. Ils font référence à l’arrêt puis au redémarrage d’IIS. C’est la dernière entrée qui nous intéresse.
Nous pouvons donc créer notre Trigger avec les paramètres suivants pour initier un warmup juste après le redémarrage d’IIS :

Quid des recyclage manuels ou automatiques ?
Si nous souhaitons lancer un WarmUp dès qu’un Application Pool est recyclée, nous devons modifier les propriétés IIS de l’Application Pool.

On a à notre disposition plusieurs évenements pour contrôler finement quels types de recyclages seront interceptés. Dans notre cas, activons “Manual Recycle”.
Ainsi, dès qu’on va demander le recyclage d’un App Pool, on aura l’évenement suivant que nous pourons rajouter comme trigger à notre tâche planifiée :

Et avec ça, vous prendrez peut-être un code de retour ?
Toutes les tâches planifiées Windows gêrent un code de retour (Last Run Result). Comme les scripts peuvent parfois devenir complexes, on pourra aller encore plus loin et retourner un code pour tracer si tout s’est bien passé :
[Environment]::Exit(0)
ou bien pour remonter une erreur de traitement avec un retour –1, par exemple :

Bon réveil à vos fermes !
SPierrick