Condividi tramite


Come enumerare Aggiornamenti corrispondenti a criteri specifici

Questo argomento illustra come enumerare gli aggiornamenti software che corrispondono a criteri specifici in Configuration Manager compilando una query e quindi usando il ExecuteQuery metodo della QueryProcessor classe per eseguire la query.

Per enumerare gli aggiornamenti corrispondenti a criteri specifici

  1. Configurare una connessione al provider SMS.

  2. Assegnare una query specifica a una variabile.

  3. Passare la variabile al ExecuteQuery metodo .

Esempio

Il metodo di esempio seguente enumera gli aggiornamenti che corrispondono a criteri specifici passando una query al ExecuteQuery metodo .

Di seguito sono illustrate quattro query di esempio:

  1. Query che visualizza gli aggiornamenti software già scaricati.

  2. Query che visualizza gli aggiornamenti software già distribuiti.

  3. Query che visualizza gli aggiornamenti software con un particolare valore di gravità.

  4. Query che visualizza i CI_IDs di aggiornamento software associati a un articolo knowledge base specifico.

    Informazioni dettagliate sulle proprietà associate a un aggiornamento software sono disponibili nel materiale di riferimento della classe SMS_SoftwareUpdate .

    Per informazioni sulla chiamata del codice di esempio, vedere Chiamata di frammenti di codice Configuration Manager.


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

Il metodo di esempio include i parametri seguenti:

Parametro Tipo Descrizione
connection -Gestito: WqlConnectionManager
- VBScript: SWbemServices
Connessione valida al provider SMS.

Compilazione del codice

Questo esempio C# richiede:

Namespaces

Sistema

System.collections.generic

System.Text

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

adminui.wqlqueryengine

microsoft.configurationmanagement.managementprovider

Programmazione efficiente

Per altre informazioni sulla gestione degli errori, vedere Informazioni sugli errori di Configuration Manager.

Sicurezza di .NET Framework

Per altre informazioni sulla protezione delle applicazioni Configuration Manager, vedere Configuration Manager'amministrazione basata sui ruoli.

Vedere anche

Informazioni sulle distribuzioni degli aggiornamenti software

SMS_SoftwareUpdate