Powershell : vérification de l’installation d’un KB

Etant donné que je participe à la préparation d’une campagne de patchs suite aux failles Meltdown et Spectre, je me suis développé rapidement un script qui me permettra de vérifier si le(s) KB que nous allons installer l’auront bien été sur les systèmes en question.

Param
([string]$m,[string]$id)
$id = "KB"+$id
$KBlist = Get-Hotfix -ComputerName $m | Select HotfixID
foreach ($KB in $KBlist)
{
if ([string]$KB.HotfixID -ne $id){continue}
echo $id" effectif sur "$m
}

On exécutera simplement le script avec deux arguments :

.\win_kbcheck.ps1 -m <NomMachine> -id <NoDeKB>

Si le script ne retourne rien, c’est que le numéro de patch paramétré n’est pas installé sur la machine.

Charge CPU bloquée à 100% sur le serveur hébergeant les Office WebApps pour SharePoint 2013

Toujours dans la lignée de mon travail sur les serveurs WAC (Office WebApps pour SharePoint, voir ce précédent billet), j’ai été confronté à un problème de consommation CPU sur un des deux serveurs WAC ; le CPU était en charge maximale en permanence, même sans aucun appel des Office WebApps de la part des utilisateurs, un arrêt/relance des services et un redémarrage de la plateforme n’ayant rien changé.

svchost.exe consomme 100% du CPU

Le journal d’événements ne présentant aucune erreur particulière, je n’avais pas de piste à creuser, et le système semblait en bonne santé. Je décide alors de couper le service Windows Update qui n’a aucun impact sur le service rendu en production, et miracle :

La charge CPU retombe à des niveaux très faibles, ce qui est normal lorsque le WAC n’est pas sollicité. Dans mon environnement, laisser le service Windows Update désactivé n’est pas problématique car nous gérons à la main le patching des serveurs via des campagnes – il suffira de réactiver le service au moment de mettre à jour la machine et de le désactiver après si la consommation de CPU reste bloquée à 100%.

Le KB2919355 n’est jamais disponible au téléchargement via Windows Update sur Windows Server 2012 R2

Le KB2919355, ce patch récalcitrant apparu il y a quelques années en portant le nom de « Update 1 » pour les systèmes Windows de bureau, est un patch cumulatif de mises à jour également disponible pour Windows Server 2012 R2 ayant posé quelques soucis lors de ses premiers jours. Nécessaire pour certaines applications ainsi que globalement pour la sécurité du système par les failles qu’il corrige, j’ai été confronté plusieurs fois de manière aléatoire sur plusieurs serveurs à une indisponibilité dans Windows Update ; c’est-à-dire que Windows Update ne se voyait jamais proposer le téléchargement et l’installation de ce KB uniquement sur certains de mes serveurs virtuels, sans qu’il n’y ait jamais de variable commune.

Et c’est exactement cette absence de paramètre commun qui était étrange : 1 vCPU et 1 Go de RAM pour mes deux contrôleurs de domaine installés initialement en Core, 4 vCPU et 4 Go de RAM sur un serveur classique sans rôle avec interface graphique, des serveurs qui ne sont fatalement pas dans la même OU, qui ne se voient pas gérés de la même manière au niveau de ma GPO Windows Update… De plus, ils étaient installés avec le même ISO, utilisant la même licence.

Voulant éviter autant que possible une installation à la main, j’ai donc essayé plusieurs remèdes :

Le premier, la désactivation de Windows Update, la suppression du répertoire SoftwareDistribution localisé dans C:\Windows et la relance du service. Cela permet de réinitialiser Windows Update et son cache, et ainsi de repartir comme si vous n’aviez jamais installé de KB sur le système (c’est-à-dire que Windows Update perd son historique, les mises à jour restent installées). Avant de réaliser la suppression du répertoire, j’ai quand même procédé à une copie de sauvegarde au cas où.

net stop wuauserv
rd c:\windows\softwaredistribution /s /q
net start wuauserv

Pas mieux après cette tentative.

Le deuxième essai aura été celui de désactiver la GPO influant sur Windows Update (indiquant à mes serveurs de télécharger les mises à jours sans les installer). Même en indiquant aux serveurs de ne plus rechercher les mises à jour automatiquement et en lançant une recherche après un redémarrage, point de salut.

Troisième tentative de correction avec l’outil DISM, afin de vérifier que tous les composants systèmes sont bien installés et ne sont pas endommagés.

dism /online /cleanup-image /scanhealth

Et… tout va bien sur le système.

Quatrième et dernière commande, sans espoir :

sfc /scannow

Espoir vain, bien évidemment. Mes serveurs ne présentaient aucun bug, aucune corruption et étaient en parfait état de marche. Mais pour autant, j’avais toujours une disparité au niveau des patchs déployés car certains de mes serveurs avaient eu le droit à l’Update 1 et pas les autres.

En réalité, ce qui empêche Windows Update de voir ce gros KB2919355 de presque 900 Mo, c’est le KB2919442, qui pour des raisons inconnues, n’est pas toujours visible par Windows Update, il faut donc l’installer à la main. Il pèse 10 Mo et est disponible sur le site de Microsoft.

Une fois ce patch ridicule installé, on relance Windows Update et… miracle !

Le patch tant attendu apparaît et est enfin disponible au téléchargement, et à l’installation. Une fois toute l’opération déroulée, on retrouve parmi les changements esthétiques les boutons sur l’écran d’accueil.