robcortez
11/7/2017 - 2:00 PM

Get Pending Reboot Status

Determine if a workstation/server has a reboot pending. Useful for determining if updates have been installed.

Function Get-PendingRebootStatus {
	# Making registry connection to the local/remote computer 
	$RegCon = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]"LocalMachine",$ENV:ComputerName) 
			 
	# If Vista/2008 & Above query the CBS Reg Key 
	If ($WMI_OS.BuildNumber -ge 6001) 
	{ 
		$RegSubKeysCBS = $RegCon.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\").GetSubKeyNames() 
			$CBSRebootPend = $RegSubKeysCBS -contains "RebootPending" 
		}
		else{
			$CBSRebootPend = $false
	}
		   
	# Query WUAU from the registry 
	$RegWUAU = $RegCon.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\") 
	$RegSubKeysWUAU = $RegWUAU.GetSubKeyNames() 
	$WUAURebootReq = $RegSubKeysWUAU -contains "RebootRequired" 

	If($CBSRebootPend –OR $WUAURebootReq)
	{
		$machineNeedsRestart = $true
	}
	else
	{
		$machineNeedsRestart = $false
	}
	 
	# Closing registry connection 
	$RegCon.Close() 
	
	return $machineNeedsRestart
}