Dela via


Lägga till en kategori i en Windows-drivrutin

I Configuration Manager lägger du till en kategori i en Windows-drivrutin genom att lägga till den unika identifieraren för kategorin i matrisegenskapen SMS_Driver Server WMI-klassCategoryInstance_UniqueIDs. Matrisen innehåller en eller flera strängidentifierare som matchar egenskapsvärdet SMS_CategoryInstance Server WMI-klassCategoryInstance_UniqueID . Det finns en instans av SMS_CategoryInstance WMI-klassobjekt för varje kategori i systemet.

Obs!

Den unika identifieraren för en drivrutinskategori läggs till i texten "DriverCategories". Andra kategorityper har olika text.

En kategori har lokaliseringsinformation och det är från egenskapen SMS_CategoryInstance Server WMI-klassLocalizedCategoryInstanceName som kategorins visningsnamn hämtas.

Så här lägger du till en kategori i en Windows-drivrutin

  1. Konfigurera en anslutning till SMS-providern. Mer information finns i grunderna för SMS-provider.

  2. Hämta SMS_Driver-objektet för drivrutinen som du vill lägga till en kategori i.

  3. Hämta kategorinamnidentifieraren från objektet SMS_CategoryInstance Serverns WMI-klass som matchar önskad kategori.

  4. Lägg till kategoriidentifieraren i objektmatrisegenskapen SMS_Driver Server WMI-klassCategoryInstance_UniqueIDs.

  5. Checka in WMI-klassändringarna för SMS_Driver server .

Exempel

Följande exempelmetod lägger till en kategori i en Windows-drivrutin. driverID är ett giltigt SMS_Driver WMI-klassobjekt för server . Mer information finns i Om drivrutinshantering för operativsystemdistribution.

Information om hur du anropar exempelkoden finns i Anropa Configuration Manager kodfragment.

Sub AddDriverCategory(connection,driver,categoryName)

    Dim categories
    Dim category
    Dim driverCategoryID
    Dim categoryID
    Dim results
    Dim existingCategory

    ' Find the category that matches the supplied category name.
    Set results = _
      connection.ExecQuery("SELECT * From SMS_CategoryInstance WHERE LocalizedCategoryInstanceName = '" _
      + categoryName+ "'")

    ' If the category was found, add it to the driver.
    For Each category in results

        If IsNull(driver.CategoryInstance_UniqueIDs) or UBound (driver.CategoryInstance_UniqueIDs) = -1 Then
            ' It is empty. Add the category.
            driver.CategoryInstance_UniqueIDs =  Array(category.CategoryInstance_UniqueID)
         Else

            ' Determine if the category is already applied to the driver.
            For each existingCategory in driver.CategoryInstance_UniqueIDs
                if existingCategory = category.CategoryInstance_UniqueID Then
                    WScript.Echo "Already added"
                    Exit Sub
                End If
            Next

            ' Add the category.
            categories = driver.CategoryInstance_UniqueIDs
            Redim Preserve categories (UBound (driver.CategoryInstance_UniqueIDs)+1)
            categories (Ubound (categories)) =  category.CategoryInstance_UniqueID
            driver.CategoryInstance_UniqueIDs = categories
        End If

        driver.Put_
    Next
End Sub
public void AddDriverCategory(
    WqlConnectionManager connection,
    IResultObject driver,
    string categoryName)
{
    try
    {
        // Get the category.
        IResultObject results = connection.QueryProcessor.ExecuteQuery(
        "SELECT * From SMS_CategoryInstance WHERE LocalizedCategoryInstanceName = '" + categoryName + "'");

       ArrayList driverCategories = new ArrayList(driver["CategoryInstance_UniqueIDs"].StringArrayValue);//;driverCategories);

        foreach (IResultObject category in results)
        {
            foreach (string driverCategory in driverCategories)
            {
                // Do nothing if the driver already has the category.
                if (driverCategory == category["CategoryInstance_UniqueID"].StringValue)
                {
                    Console.WriteLine("Already exists");
                    return;
                }
           }

            // Add the category to the action.
           driverCategories.Add(category["CategoryInstance_UniqueID"].StringValue);
        }

        // Update the driver.
        driver["CategoryInstance_UniqueIDs"].StringArrayValue = (string[])driverCategories.ToArray(typeof(string));
        driver.Put();

    }
    catch (SmsException e)
    {
        Console.WriteLine("Failed to add the category" + e.Message);
        throw;
    }
}

Exempelmetoden har följande parametrar:

Parameter Typ Beskrivning
Connection -Hanterade: WqlConnectionManager
– VBScript: SWbemServices
En giltig anslutning till SMS-providern.
driver -Hanterade: IResultObject
– VBScript: SWbemObject
Windows-drivrutinen. Det är en instans av SMS_Driver serverns WMI-klass.
categoryName -Hanterade: String
– VBScript: String
Namnet på en befintlig kategori. Detta matchar egenskapen SMS_CategoryInstance WMI-klassLocalizedCategoryInstanceName för server.

Kompilera koden

Det här C#-exemplet kräver:

Namnområden

System

System.Collections.Generic

System.Text

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

Församling

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Robust programmering

Mer information om felhantering finns i Om Configuration Manager fel.

.NET Framework Säkerhet

Mer information om hur du skyddar Configuration Manager program finns i Configuration Manager rollbaserad administration.

Se även

Om drivrutinshantering för operativsystemdistributionSå här tar du bort en kategori från en Windows-drivrutin