Edit

Share via


How to Enumerate Updates Matching a Specific Criteria

This topic explains how to enumerate software updates that match specific criteria in Configuration Manager 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 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.

.NET Framework Security

For more information about securing Configuration Manager applications, see Configuration Manager role-based administration.

See also

About software update deployments

SMS_SoftwareUpdate