Bonjour à tous,
Voici une fonction permettant de tester si un système est en attente de redémarrage, en prenant en compte :
- Les redémarrages en attente provenant de l’installation d’une fonctionnalité
- Les redémarrages en attente provenant de l’installation de mises à jour logicielles
- Les redémarrages en attente provenant de fichiers en attente de renommage (Mise à jour de .dll par exemple)
- Les redémarrages en attente provenant du client SCCM
Si un de ces composants nécessite un redémarrage la fonction renverra la valeur $true.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | function Test-RebootRequired { # Initialize result array $result = @{ CBSRebootPending = (Get-ChildItem "HKLM:Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending" -ErrorAction SilentlyContinue).CBSRebootPending WindowsUpdateRebootRequired = (Get-Item "HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired" -ErrorAction SilentlyContinue).WindowsUpdateRebootRequired FileRenamePending = (Get-ItemProperty "HKLM:SYSTEM\CurrentControlSet\Control\Session Manager" -Name PendingFileRenameOperations -ErrorAction SilentlyContinue).FileRenamePending SCCMRebootPending = $false } # Complete result Array with SCCM client status try { $util = [wmiclass]"\\.\root\ccm\clientsdk:CCM_ClientUtilities" $status = $util.DetermineIfRebootPending() if(($status -ne $null) -and $status.RebootPending){ $result.SCCMRebootPending = $true } }catch{} # Normalize Result Array if ($result.CBSRebootPending -eq $null){ $result.CBSRebootPending = $false } if ($result.WindowsUpdateRebootRequired -eq $null){ $result.WindowsUpdateRebootRequired = $false } if ($result.FileRenamePending -eq $null){ $result.FileRenamePending = $false } #Return Reboot required return $result.ContainsValue($true) } |
Enjoy 😉