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 :)