Disclaimer
This is my personal blog. The opinions and views I express are my own. The information I provide is on an as-is basis. I make no representations as to accuracy, completeness, currentness, suitability, or validity of any information on this blog and will not be liable for any errors, omissions, or delays in this information or any losses, injuries or damages arising from its use.

Force WSUS checkin with PowerShell

#  *** THIS SCRIPT IS PROVIDED WITHOUT WARRANTY, USE AT YOUR OWN RISK ***
<#

.DESCRIPTION
	Starts the Windows Update service (wuauserv) if it is stopped and forces a checkin 
    with the WSUS Server. This function uses the Invoke-Command CMDlet which 
    will require PSRemoting to be enabled on the target machine. 

.NOTES
	File Name: force-WSUScheckin.ps1
	Author: David Hall
	Contact Info: 
		Website: www.signalwarrant.com
		Twitter: @signalwarrant
		Facebook: facebook.com/signalwarrant/
		Google +: plus.google.com/113307879414407675617
		YouTube Subscribe link: https://www.youtube.com/channel/UCgWfCzNeAPmPq_1lRQ64JtQ?sub_confirmation=1
	Requires: PowerShell Remoting Enabled (Enable-PSRemoting) 
	Tested: PowerShell Version 5

.PARAMETER ComputerName
    See the examples below, the computername can be one or 
    many computer names
		 
.EXAMPLE
     .\force-WSUScheckin.ps1 -ComputerName CL1
     .\force-WSUScheckin.ps1 -ComputerName CL1 -verbose
     .\force-WSUScheckin.ps1 -ComputerName CL1, CL2 -verbose
     .\force-WSUScheckin.ps1 -ComputerName (Get-Content -Path "C:\computers.txt") -verbose

#>
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True)]
[string[]]$ComputerName

)

$service = get-service -Name wuauserv

# Check to see if the wuauserv service is stopped
if ($service.Status -eq "Stopped"){

# If the service is stopped we're going to start it and force WSUS checkin
# then Exit
Write-verbose "1. WUAUSERV is stopped... starting"
Invoke-Command -ComputerName $ComputerName -scriptblock {Start-Service wuauserv}
[System.Threading.Thread]::Sleep(3000)

Write-verbose "2. Forcing WSUS Checkin"
Invoke-Command -ComputerName $ComputerName -scriptblock {wuauclt.exe /detectnow}
[System.Threading.Thread]::Sleep(1500)

Write-verbose "3. Checkin Complete"
Exit

} else {

# If the service is started we'll just force the WSUS checkin and Exit
Write-verbose "1. Forcing WSUS Checkin"
Invoke-Command -ComputerName $ComputerName -scriptblock {wuauclt.exe /detectnow}
[System.Threading.Thread]::Sleep(1500)

Write-Verbose "2. Checkin Complete"
Exit

}

 

DOWNLOAD THE CODE
force-WSUScheckin

Website: www.signalwarrant.com
Twitter: @signalwarrant
Facebook: facebook.com/signalwarrant/
Google +: plus.google.com/113307879414407675617

1 Comment

  1. Marshall | | Reply

    Great script. I use the command switch /reportnow. It seems to report back better for me.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.