Provides overall server status counts for approved Microsoft updates on a Windows Server Update Services (WSUS) server, similar to information shown at the “Update Services” node of the WSUS console for a specific server.  The WSUS 3.0 console shows information for all updates, whereas this output is filtered specifically by approved Microsoft updates using an UpdateScope. This script was contributed by the Microsoft WSUS team.

The output is comma delimited text:
ServerName,CurrentDate,TotalComputers,TotalUpdates,ComputerTargetsUpToDate,ComputerTargetsNeedingUpdates,
ComputerTargetsWithErrors,UpdatesUpToDate,UpdatesNeededByComputers,UpdatesWithClientErrors

Sample output:

MYSERVER,4/5/2007,131,1527,5,64,6,0,128,9

This script connects to a WSUS 3.0 server on the machine where the script runs. This script can be adapted to connect to remote WSUS 3.0 servers by changing the GetUpdateServer() call to GetUpdateServer(<servername>, true|false), where <servername> is the name of the remote WSUS server, and true|false refers to the use of SSL to make the connection.

PowerShell
Edit|Remove
[reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") | out-null
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer();
 
$updateScope = new-object Microsoft.UpdateServices.Administration.UpdateScope;
$updateScope.ApprovedStates = [Microsoft.UpdateServices.Administration.ApprovedStates]::LatestRevisionApproved;
$updateScope.UpdateSources = [Microsoft.UpdateServices.Administration.UpdateSources]::MicrosoftUpdate;
 
$computerScope = new-object Microsoft.UpdateServices.Administration.ComputerTargetScope;
 
 
$updatesFailed = $updatesNeeded = $updatesUpToDate = 0;
$updates = $wsus.GetSummariesPerUpdate($updateScope, $computerScope);
$updates | foreach-object {
     if ($_.FailedCount) {
           $updatesFailed++;
     }
     elseif ($_.DownloadedCount -or $_.InstalledPendingRebootCount -or $_.NotInstalledCount) {
          $updatesNeeded++;
     }
     elseif (!$_.UnknownCount) {
          $updatesUpToDate++;
     }
}
 
$computersFailed = $computersNeeded = $computersUpToDate = 0;
$computers = $wsus.GetSummariesPerComputerTarget($updateScope, $computerScope);
$computers | foreach-object {
 
     if ($_.FailedCount) {
           $computersFailed++;
     }
     elseif ($_.DownloadedCount -or $_.InstalledPendingRebootCount -or $_.NotInstalledCount) {
           $computersNeeded++;
     }
     elseif (!$_.UnknownCount) {
           $computersUpToDate++;
     }
}
 
$wsus.ServerName+","+[DateTime]::UtcNow.ToShortDateString()+","+
$computers.Count+","+$updates.Count+","+
$computersUpToDate+","+$computersNeeded+","+$computersFailed+","+
$updatesUpToDate+","+$updatesNeeded+","+$updatesFailed;