Megosztás a következőn keresztül:


Gyűjtemény tagjainak számbavétele

A Configuration Manager a gyűjteményen keresztüli számbavétel előnyben részesített módszere a használataSMS_FullCollectionMembership Server WMI Class.

1. lekérdezés: SMS_FullCollectionMembership: Ez a példa bemutatja, hogyan sorolhatja fel a Minden rendszer (SMS00001) gyűjtemény tagjait a SMS_FullCollectionMembership Server WMI Classhasználatával.

2. lekérdezés: SMS_CollectionMember_a: Ez a példa egy lassabb alternatívát mutat be a SMS_CollectionMember_a kiszolgálói WMI-osztály osztály használatával.

3. lekérdezés: SMS_Collection: Ez a példa egy további alternatívát mutat be, amely a tagok lekérdezésére szolgál a SMS_Collection kiszolgálói WMI-osztály tulajdonságában MemberClassName megadott tényleges gyűjteményosztálynév használatával. A tényleges osztály lekérdezése teljesítménybeli előnyöket biztosít, és lehetővé teszi összetettebb lekérdezések, például JOIN-ek létrehozását. A példa megegyezik a korábbi lekérdezések példáival.

Megjegyzés:

Az SMS-szolgáltató első inicializálásakor regisztrálja és dinamikusan betölti az SMS-gyűjtési osztályt a memóriába. Ha a betöltés előtt WQL-lekérdezést végez a gyűjteményosztályon, a rendszer üres lekérdezési eredményhalmazt ad vissza.

A gyűjtemények szorosan kötődnek a csomagokhoz, programokhoz és hirdetésekhez. További információ: A szoftverterjesztés áttekintése.

Ezekhez a példákhoz a következő értékek szükségesek:

  • Egy Windows Management Instrumentation (WMI) kapcsolatobjektum.

    Példa a Visual Basicben a subroutine hívásra:

Call EnumerateCollectionMembers(swbemServices)  

Példa a metódushívásra a C#-ban:

EnumerateCollectionMembers(WMIConnection)  

Gyűjtemény tagjainak számbavétele

  1. Állítson be egy kapcsolatot az SMS-szolgáltatóval.

  2. Adjon meg egy lekérdezést a gyűjtemény erőforrásainak kiválasztásához.

  3. Hajtsa végre a lekérdezést, és számba adja az eredményeket.

Példa

Az alábbi példametódus egy gyűjtemény tagjait sorolja fel.

A mintakód meghívásával kapcsolatos információkért lásd: Configuration Manager Kódrészletek hívása.


Sub EnumerateCollectionMembers(connection)  
    Const wbemFlagReturnImmediately = 16    Const wbemFlagForwardOnly = 32  
    ' Set required variables.  
    ' Note:  Values must be manually added to the queries below.  
    Dim Query1    Dim Query2    Dim Query3    Dim ListOfResources1    Dim ListOfResources2    Dim ListOfResources3    Dim Resource1    Dim Resource2    Dim Resource3  
    ' The following example shows how to enumerate the members of the All Systems (SMS00001) collection.  
    Query1 = "SELECT ResourceID FROM SMS_FullCollectionMembership WHERE CollectionID = 'SMS00001'"   

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

    ' The query returns a collection that needs to be enumerated.  
    Wscript.Echo " "  
    Wscript.Echo "Query: " & Query1  
    For Each Resource1 In ListOfResources1       
        Wscript.Echo Resource1.ResourceID     
    Next  

    ' A slower alternative is to use the SMS_CollectionMember_a association class.  
    Query2 = "SELECT ResourceID FROM SMS_CollectionMember_a WHERE CollectionID = 'SMS00001'"   

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

    ' The query returns a collection that needs to be enumerated.  
    Wscript.Echo " "  
    Wscript.Echo "Query: " & Query2  
    For Each Resource2 In ListOfResources2       
        Wscript.Echo Resource2.ResourceID     
    Next  

    ' A further alternative is to query the members by using the actual collection class name specified in the MemberClassName property of SMS_Collection.   
    Query3 = "SELECT ResourceID FROM SMS_CM_Res_Coll_SMS00001"   

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

    ' The query returns a collection that needs to be enumerated.  
    Wscript.Echo " "  
    Wscript.Echo "Query: " & Query3  
    For Each Resource3 In ListOfResources3       
        Wscript.Echo Resource3.ResourceID     
    Next  

End Sub  
public void EnumerateCollectionMembers(WqlConnectionManager connection)  
{  
    // Set required variables.  
    // Note:  Values must be manually added to the queries below.  

    try  
    {  
        // The following example shows how to enumerate the members of the All Systems (SMS00001) collection.  
        string Query1 = "SELECT ResourceID FROM SMS_FullCollectionMembership WHERE CollectionID = 'SMS00001'";  

        // Run query.  
        IResultObject ListOfResources1 = connection.QueryProcessor.ExecuteQuery(Query1);  

        // The query returns a collection that needs to be enumerated.  
        Console.WriteLine(" ");  
        Console.WriteLine("Query: " + Query1);  
        foreach (IResultObject Resource1 in ListOfResources1)  
        {  
            Console.WriteLine(Resource1["ResourceID"].IntegerValue);  
        }  

        // A slower alternative is to use the SMS_CollectionMember_a association class.  
        string Query2 = "SELECT ResourceID FROM SMS_CollectionMember_a WHERE CollectionID = 'SMS00001'";  

        // Run query.  
        IResultObject ListOfResources2 = connection.QueryProcessor.ExecuteQuery(Query2);  

        // The query returns a collection that needs to be enumerated.  
        Console.WriteLine(" ");  
        Console.WriteLine("Query: " + Query2);  
        foreach (IResultObject Resource2 in ListOfResources2)  
        {  
            Console.WriteLine(Resource2["ResourceID"].IntegerValue);  
        }  

        // A further alternative is to query the members by using the actual collection class name specified in the MemberClassName property of SMS_Collection.  
        string Query3 = "SELECT ResourceID FROM SMS_CM_Res_Coll_SMS00001";  

        // Run query.  
        IResultObject ListOfResources3 = connection.QueryProcessor.ExecuteQuery(Query3);  

        // The query returns a collection that needs to be enumerated.  
        Console.WriteLine(" ");  
        Console.WriteLine("Query: " + Query3);  
        foreach (IResultObject Resource3 in ListOfResources3)  
        {  
            Console.WriteLine(Resource3["ResourceID"].IntegerValue);  
        }  
    }  

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

A példametódus a következő paraméterekkel rendelkezik:

Paraméter Típus Leírás
connection -Kezelt: WqlConnectionManager
- VBScript: SWbemServices
Érvényes kapcsolat az SMS-szolgáltatóval.

A kód fordítása

A C#-példához a következőre van szükség:

Névterek

Rendszer

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Összeszerelés

adminui.wqlqueryengine

microsoft.configurationmanagement.managementprovider

mscorlib

Robusztus programozás

A hibakezeléssel kapcsolatos további információkért lásd: A Configuration Manager hibák ismertetése.

Lásd még

SMS_CollectionMember_a kiszolgálói WMI-osztály
SMS_Collection kiszolgálói WMI-osztály
A szoftverterjesztés áttekintése– A központi telepítésekkel kapcsolatos tudnivalók