Windows SBS 2003 Update Services Gives Error: The Element Already Exists in the Collection

[Today's post comes to us courtesy of Damian Leibaschoff and Justin Crosby from Commercial Technical Support and Chris Puckett from Product Quality]

UPDATE 4/19/2010

The Exchange 2000 security update, 976703, contained an identifier in the metadata that was not unique enough for a WSUS API call used by SBS 2003 to differentiate 976703 from the Exchange 2003 security update, 976702.  This resulted in the error in the SBS 2003 console and the Server Status Report.

The Exchange 2000 security update, 976703, has since been expired and simultaneously re-released with modified metadata. The issue with the SBS 2003 Console and the Server Status Report will resolve itself after the next WSUS Sync.  If you did or did not decline 976703 before, there is no need to take any further action after WSUS has synced again.  You can wait for the next sync to occur as scheduled or sync manually if you wish.  After successfully re-syncing you may need to close and re-open the SBS console for the error to disappear.

Symptom:

After synchronizing updates released on Tuesday, April 13, 2010, the Update Services node in the SBS 2003 Console returns an error: The element already exists in the collection. Parameter name: value.

--------------------------------------------------------------------------------
Server Error in '/UpdateServices' Application.
--------------------------------------------------------------------------------

The element already exists in the collection. Parameter name: value

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentException: The element already exists in the collection. Parameter name: value

Source Error:
Line 194:                              </div>
Line 195:                              <%Response.Flush();
Line 196:                                RenderPage();%>
Line 197:                              <div id="divForm" style='display: none'>
Line 198:                              <form id="formMain" method="post" runat="server">
Source File: c:\inetpub\UpdateServices\Home.aspx    Line: 196

Stack Trace:
[ArgumentException: The element already exists in the collection.
Parameter name: value]

   Microsoft.UpdateServices.Administration.WsusCollection.CheckItemIsValid(Int32 index, Object value) +152
   Microsoft.UpdateServices.Administration.WsusCollection.OnInsert(Int32 index, Object value) +20
   System.Collections.CollectionBase.System.Collections.IList.Add(Object value) +106
   Microsoft.UpdateServices.Administration.UpdateSummaryCollection.Add(IUpdateSummary value) +10
   Microsoft.UpdateServices.Internal.BaseApi.UpdateSummary.BuildSummaryCollection(GenericReadableRow[] rows, GroupBy groupBy) +476
   Microsoft.UpdateServices.Internal.BaseApi.ComputerTargetGroup.GetSummaryPerUpdate() +117
   Microsoft.SBS.UpdateServices.DataProvider.GetPendingUpdateCollection() +420
   Microsoft.SBS.UpdateServices.DataProvider.GetPendingUpdateCounts() +5
   Microsoft.SBS.UpdateServices.StatusPage.Utility.GetStatusItems(Boolean waitingForSyncStart) +2705
   Microsoft.SBS.UpdateServices.StatusPage.formHome.RenderPage() +23
   ASP.Home_aspx.__Render__control1(HtmlTextWriter __output, Control parameterContainer) in c:\inetpub\UpdateServices\Home.aspx:196
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +27
   System.Web.UI.Control.Render(HtmlTextWriter writer) +7
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +243
   System.Web.UI.Page.ProcessRequestMain() +1926
--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:1.1.4322.2443; ASP.NET Version:1.1.4322.2407

image

The Server Status Report may also fail to deliver.

Event Type:        Error
Event Source:    ServerStatusReports
Event Category:                None
Event ID:              1
Description:
Server Status Report:
                URL:                       https://localhost/monitoring/perf.aspx?reportMode=1&allHours=1
                Error Message: The element already exists in the collection.
Parameter name: value
                Stack Trace:           at Microsoft.UpdateServices.Administration.WsusCollection.CheckItemIsValid(Int32 index, Object value)
   at Microsoft.UpdateServices.Administration.WsusCollection.OnInsert(Int32 index, Object value)
   at System.Collections.CollectionBase.System.Collections.IList.Add(Object value)
   at Microsoft.UpdateServices.Administration.UpdateSummaryCollection.Add(IUpdateSummary value)
   at Microsoft.UpdateServices.Internal.BaseApi.UpdateSummary.BuildSummaryCollection(GenericReadableRow[] rows, GroupBy groupBy)
   at Microsoft.UpdateServices.Internal.BaseApi.ComputerTargetGroup.GetSummaryPerUpdate()
   at Microsoft.SBS.UpdateServices.DataProvider.GetPendingUpdateCollection()
   at Microsoft.SBS.UpdateServices.DataProvider.GetPendingUpdateCounts()
   at Microsoft.SBS.UpdateServices.StatusPage.Utility.GetStatusItems()
   at usage.frmPerf.PopulateStatusItems()
   at usage.frmPerf.renderReportWorker()
   at usage.frmPerf.renderReport()

Resolution:

Decline the Security Update for Exchange 2000 Server Service Pack 3 (KB976703) using the steps below.

  1. Click Start, Administrative Tools, Windows Server Update Services.
  2. On the Action menu, click Search.
     image
  3. In the text box, enter 976703 and click Find Now.
    image
  4. When the result is returned, right-click the 976703 update for Exchange 2000 and click Decline.
     image
  5. 5. Click Yes on the pop-up.
    image
  6. Click Close in the Search dialog.
  7. If you happen to have one or more Exchange 2000 Servers in your environment, you will want to install Security Update for Exchange 2000 Server Service Pack 3 (KB976703) manually from Microsoft Update or from the Microsoft Download Center.