Поделиться через


How to Enumerate Updates Matching a Specific Criteria

Applies To: System Center Configuration Manager 2007, System Center Configuration Manager 2007 R2, System Center Configuration Manager 2007 R3, System Center Configuration Manager 2007 SP1, System Center Configuration Manager 2007 SP2

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.

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

Reference

SMS_SoftwareUpdate Server WMI Class

Concepts

System Center Configuration Manager Software Development Kit
Configuration Manager Software Updates
Software Updates Deployments