This topic explains how to enumerate software updates that match specific criteria in Microsoft System Center Configuration Manager 2007 by building a query and then using the ExecuteQuery method of the QueryProcessor class to run the query.

To enumerate updates matching a specific criteria

  1. Set up a connection to the SMS Provider.

  2. Assign a specific query to a variable.

  3. Pass the variable to the ExecuteQuery method.

Example

The following example method enumerates updates that match specific criteria by passing a query to the ExecuteQuery method.

Four example queries are demonstrated below:

  1. A query that displays the software updates that have already been downloaded.

  2. A query that displays the software updates that have already been deployed.

  3. A query that displays the software updates that have a particular severity value.

  4. A query that displays the software update CI_IDs that are associated with a specific knowledge base article.

Detailed information about the properties that are associated with a software update is in the SMS_SoftwareUpdate Server WMI Class class reference material.

For information about calling the sample code, see Calling Configuration Manager Code Snippets.

Visual Basic Script  Copy Code
Sub EnumerateUpdatesMatchingCriteria(connection)

	' This query displays all updates that have already been downloaded.
	Query1 = "Select * from SMS_SoftwareUpdate where IsContentProvisioned=1" 

	' Run query.
	Set ListOfResources1 = connection.ExecQuery(Query1, , wbemFlagForwardOnly Or wbemFlagReturnImmediately)

	' The query returns a collection that needs to be enumerated.
	Wscript.Echo " "
	Wscript.Echo "Update Content Is Downloaded."
	Wscript.Echo "Query: " & Query1
	Wscript.Echo "--------------------------------------------------------"  

	For Each Resource1 In ListOfResources1	 
		Wscript.Echo "Name:	 " & Resource1.LocalizedDisplayName
		Wscript.Echo "ArticleID:  " & Resource1.ArticleID
		Wscript.Echo "CI_ID:	" & Resource1.CI_ID
		Wscript.Echo "Severity:   " & Resource1.SeverityName   
	Next
 
	 
	' This query displays the updates that have already been deployed.
	Query2 = "Select * from SMS_SoftwareUpdate where IsDeployed=1" 

	' Run query.
	Set ListOfResources2 = connection.ExecQuery(Query2, , wbemFlagForwardOnly Or wbemFlagReturnImmediately)

	' The query returns a collection that needs to be enumerated.
	Wscript.Echo " "
	Wscript.Echo "Updates Have Already Been Deployed."
	Wscript.Echo "Query: " & Query2
	Wscript.Echo "--------------------------------------------------------"  

	For Each Resource2 In ListOfResources2	 
		Wscript.Echo "Name:	 " & Resource2.LocalizedDisplayName
		Wscript.Echo "ArticleID:  " & Resource2.ArticleID
		Wscript.Echo "CI_ID:	" & Resource2.CI_ID
		Wscript.Echo "Severity:   " & Resource2.SeverityName   
	Next

	 
	' This query displays the updates that have a particular severity value. 
	Query3 = "Select * from SMS_SoftwareUpdate where SeverityName='Critical'" 

	' Run query.
	Set ListOfResources3 = connection.ExecQuery(Query3, , wbemFlagForwardOnly Or wbemFlagReturnImmediately)

	' The query returns a collection that needs to be enumerated.
	Wscript.Echo " "
	Wscript.Echo "Updates That Have A Particular Severity Title."
	Wscript.Echo "Query: " & Query3
	Wscript.Echo "--------------------------------------------------------"  

	For Each Resource3 In ListOfResources3	 
		Wscript.Echo "Name:	 " & Resource3.LocalizedDisplayName
		Wscript.Echo "ArticleID:  " & Resource3.ArticleID
		Wscript.Echo "CI_ID:	" & Resource3.CI_ID
		Wscript.Echo "Severity:   " & Resource3.SeverityName   
	Next

	 ' This query displays software updates associated with a specific knowledge base artile.
	Query4 = "SELECT * FROM SMS_SoftwareUpdate WHERE ArticleID='832880'" 

	' Run query.
	Set ListOfResources4 = connection.ExecQuery(Query4, , wbemFlagForwardOnly Or wbemFlagReturnImmediately)

	' The query returns a collection that needs to be enumerated.
	Wscript.Echo " "
	Wscript.Echo "Updates For A Specific KB Article."
	Wscript.Echo "Query: " & Query4
	Wscript.Echo "--------------------------------------------------------"  

	For Each Resource4 In ListOfResources4	 
		Wscript.Echo "Name:	 " & Resource4.LocalizedDisplayName
		Wscript.Echo "ArticleID:  " & Resource4.ArticleID
		Wscript.Echo "CI_ID:	" & Resource4.CI_ID
		Wscript.Echo "Severity:   " & Resource4.SeverityName   
	Next

End Sub
C#  Copy Code
public void EnumerateUpdatesMatchingCriteria(WqlConnectionManager connection)
{

	//  Note:  Query strings or variables could easily be passed in to complete the strings, but the query string
	//		 must be contructed and variables resolved prior to passing the string to the ExecuteQuery method. 

	try
	{
	 
		// This query displays all updates that have already been downloaded.
		string query1 = "Select * from SMS_SoftwareUpdate where IsContentProvisioned=1";
	
		// Run query.
		IResultObject listOfResources1 = connection.QueryProcessor.ExecuteQuery(query1);

		// The query returns a collection that needs to be enumerated.
		Console.WriteLine(" ");
		Console.WriteLine("Update Content Is Downloaded.");
		Console.WriteLine("Query: " + query1); 		 
		Console.WriteLine("--------------------------------------------------------");
		foreach (IResultObject resource1 in listOfResources1)
		{
			Console.WriteLine();
			Console.WriteLine("Name:	 " + resource1["LocalizedDisplayName"].StringValue);
			Console.WriteLine("Article ID: " + resource1["ArticleID"].StringValue);
			Console.WriteLine("CI_ID:	" + resource1["CI_ID"].IntegerValue);
			Console.WriteLine("Severity	" + resource1["SeverityName"].StringValue);
	}

		// This query displays the updates that have already been deployed.
		string query2 = "Select * from SMS_SoftwareUpdate where IsDeployed=1";

		// Run query.
		IResultObject listOfResources2 = connection.QueryProcessor.ExecuteQuery(query2);

		// The query returns a collection that needs to be enumerated.
		Console.WriteLine(" ");
		Console.WriteLine("Updates Have Already Been Deployed.");
		Console.WriteLine("Assignments Query: " + query2);
		Console.WriteLine("--------------------------------------------------------");
		foreach (IResultObject resource2 in listOfResources2)
		{
			Console.WriteLine();
			Console.WriteLine("Name:	 " + resource2["LocalizedDisplayName"].StringValue);
			Console.WriteLine("Article ID: " + resource2["ArticleID"].StringValue);
			Console.WriteLine("CI_ID:	" + resource2["CI_ID"].IntegerValue);
			Console.WriteLine("Severity:   " + resource2["SeverityName"].StringValue);
	}

		// This query displays the updates that have a particular severity value.
		string query3 = "Select * from SMS_SoftwareUpdate where SeverityName='Critical'";

		// Run query.
		IResultObject listOfResources3 = connection.QueryProcessor.ExecuteQuery(query3);

		// The query returns a collection that needs to be enumerated.
		Console.WriteLine(" ");
		Console.WriteLine("Updates That Have A Particular Severity Title.");
		Console.WriteLine("Query: " + query3);
		Console.WriteLine("--------------------------------------------------------");
		foreach (IResultObject resource3 in listOfResources3)
		{
			Console.WriteLine();
			Console.WriteLine("Name:	 " + resource3["LocalizedDisplayName"].StringValue);
			Console.WriteLine("Article ID: " + resource3["ArticleID"].StringValue);
			Console.WriteLine("CI_ID:	" + resource3["CI_ID"].IntegerValue);
			Console.WriteLine("Severity:   " + resource3["SeverityName"].StringValue);
	}
	
		// This query displays software updates associated with a specific KB.
		string query4 = "SELECT * FROM SMS_SoftwareUpdate WHERE ArticleID='832880'";

		// Run query.
		IResultObject listOfResources4 = connection.QueryProcessor.ExecuteQuery(query4);

		// The query returns a collection that needs to be enumerated.
		Console.WriteLine(" ");
		Console.WriteLine("Updates For A Specific KB Article.");
		Console.WriteLine("Query: " + query4);
		Console.WriteLine("--------------------------------------------------------");
		foreach (IResultObject resource4 in listOfResources4)
		{
			Console.WriteLine();
			Console.WriteLine("Name:	 " + resource4["LocalizedDisplayName"].StringValue);
			Console.WriteLine("Article ID: " + resource4["ArticleID"].StringValue);
			Console.WriteLine("CI_ID:	" + resource4["CI_ID"].IntegerValue);
			Console.WriteLine("Severity:   " + resource4["SeverityName"].StringValue);
	}
}

	catch (SmsException ex)
	{
		Console.WriteLine("Failed to run queries. Error: " + ex.Message);
		throw;
}
}

The example method has the following parameters:

Parameter

Type

Description

connection

  • Managed: WqlConnectionManager

  • VBScript: SWbemServices

A valid connection to the SMS Provider.

Compiling the Code

This C# example requires:

Namespaces

System

System.Collections.Generic

System.Text

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

adminui.wqlqueryengine

microsoft.configurationmanagement.managementprovider

Robust Programming

For more information about error handling, see About Configuration Manager Errors.

Security

For more information about securing Configuration Manager applications, see Securing Configuration Manager Applications.

See Also


Send comments about this topic to Microsoft.