Function Get-WURebootStatus { <# .SYNOPSIS Show Windows Update Reboot status. .DESCRIPTION Use Get-WURebootStatus to check if reboot is needed. .PARAMETER Silent Get only status True/False without any more comments on screen. .EXAMPLE Check whether restart is necessary. If yes, ask to do this or don't. PS C:\> Get-WURebootStatus Reboot is required. Do it now ? [Y/N]: Y .EXAMPLE Silent check whether restart is necessary. It return only status True or False without restart machine. PS C:\> Get-WURebootStatus -Silent True .NOTES Author: Michal Gajda Blog : http://commandlinegeeks.com/ .LINK http://gallery.technet.microsoft.com/scriptcenter/2d191bcd-3308-4edd-9de2-88dff796b0bc .LINK Get-WUInstallerStatus #> [CmdletBinding( SupportsShouldProcess=$True, ConfirmImpact="Low" )] Param ( [Alias("StatusOnly")] [Switch]$Silent, [String[]]$ComputerName = "localhost", [Switch]$AutoReboot ) Begin { $User = [Security.Principal.WindowsIdentity]::GetCurrent() $Role = (New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator) if(!$Role) { Write-Warning "To perform some operations you must run an elevated Windows PowerShell console." } #End If !$Role } Process { ForEach($Computer in $ComputerName) { If ($pscmdlet.ShouldProcess($Computer,"Check that Windows update needs to restart system to install next updates")) { if($Env:COMPUTERNAME,"localhost","." -contains $Computer) { Write-Verbose "$($Computer): Using WUAPI" $objSystemInfo= New-Object -ComObject "Microsoft.Update.SystemInfo" $RebootRequired = $objSystemInfo.RebootRequired } #End if $Computer -eq $Env:COMPUTERNAME else { Write-Verbose "$($Computer): Using Registry" $RegistryKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]"LocalMachine",$Computer) $RegistrySubKey = $RegistryKey.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\") $RegistrySubKeyNames = $RegistrySubKey.GetSubKeyNames() $RebootRequired = $RegistrySubKeyNames -contains "RebootRequired" } #End else $Computer -eq $Env:COMPUTERNAME Switch($RebootRequired) { $true { If($Silent) { Return $true } #End If $Silent Else { if($AutoReboot -ne $true) { $Reboot = Read-Host "$($Computer): Reboot is required. Do it now ? [Y/N]" } #End If $AutoReboot -ne $true Else { $Reboot = "Y" } #End else $AutoReboot -ne $true If($Reboot -eq "Y") { Write-Verbose "Rebooting $($Computer)" Restart-Computer -ComputerName $Computer -Force } #End If $Reboot -eq "Y" } #End Else $Silent } #End Switch $true $false { If($Silent) { Return $false } #End If $Silent Else { Write-Output "$($Computer): Reboot is not Required." } #End Else $Silent } #End Switch $false } #End Switch $objSystemInfo.RebootRequired } #End If $pscmdlet.ShouldProcess($Env:COMPUTERNAME,"Check that Windows update needs to restart system to install next updates") } #End ForEach $Computer in $ComputerName } #End Process End{} } #In The End :)