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


Создание пакета драйверов для драйвера Windows в Configuration Manager

Пакет для драйвера развертывания операционной системы в Configuration Manager создается путем создания объекта класса WMI сервера SMS_DriverPackage. Чтобы добавить драйвер в пакет, вызовите метод AddDriverContent в классе SMS_DriverPackage.

Пакеты драйверов используются для хранения содержимого, связанного с драйверами. При создании пакета драйвера исходное расположение изначально должно быть пустой общей папкой, к которому поставщик SMS имеет доступ на чтение и запись. Когда драйвер добавляется в пакет драйвера с помощью AddDriverContent, поставщик SMS копирует содержимое из исходного расположения драйвера в подкаталог в общей папке пакета драйверов.

Необходимо добавить содержимое, связанное с драйвером, в пакет драйвера и назначить его точке распространения, прежде чем клиент сможет использовать его. Содержимое драйвера получается из объекта класса WMI сервера SMS_CIToContent, где CI_ID свойство соответствует идентификатору драйвера.

Примечание.

Несколько драйверов могут совместно использовать одно и то же содержимое. Обычно это происходит при наличии нескольких INF-файлов в одном каталоге.

AddDriverContent можно использовать для одновременного добавления нескольких драйверов в пакет. Для этого добавьте несколько идентификаторов содержимого. Если bRefreshDPs будет выполнен другой вызов, параметру должно быть присвоено false значение . Это гарантирует, что пакет обновляется в точке распространения только один раз.

При вызове AddDriverContentукажите набор исходных расположений пакета. Обычно это свойство объекта ContentSourcePathкласса WMI сервера SMS_Driver, но его можно переопределить, если у поставщика нет доступа к исходному исходному расположению.

Создание пакета драйверов и добавление содержимого драйвера

  1. Настройте подключение к поставщику SMS. Дополнительные сведения см. в статье Основы поставщика SMS.

  2. Создайте объект SMS_DriverPackage .

  3. PkgSourceFlag Задайте для свойства SMS_DriverPackage объекта значение 2 (Storage Direct).

  4. Зафиксируйте SMS_DriverPackage объект .

  5. SMS_DriverPackage Получите объект .

  6. Поместите список драйверов, которые нужно добавить в пакет, в метод ContentIDsAddDriverContent в параметре .

  7. Поместите список путей к источнику содержимого драйвера в метод ContentSourcePath в AddDriverContent параметре .

  8. AddDriverContent Вызовите метод .

  9. Вызовите метод RefreshPkgSource в классе SMS_DriverPackage , чтобы завершить операцию.

  10. Назначьте пакет драйвера точке распространения. Дополнительные сведения см. в статье Назначение пакета точке распространения.

Пример

В следующем примере метода создается пакет для предоставленного идентификатора драйвера, представленного свойством CI_IDобъекта класса WMI SMS_Driver Server . Метод также принимает новое имя пакета, описание и путь к источнику пакета в качестве параметров.

Примечание.

Параметр packageSourcePath должен быть указан в виде сетевого пути универсального соглашения об именовании (UNC), например \\localhost\Drivers\ATIVideo\.

Сведения о вызове примера кода см. в разделе Вызов фрагментов кода Configuration Manager.

Sub CreateDriverPackage(connection, driverId, newPackageName, newPackageDescription,  newPackageSourcePath)  

    Dim newPackage  
    Dim driver   
    Dim packageSources  
    Dim refreshDPs  
    Dim content   
    Dim path  
    Dim contentIds  
    Dim index  
    Dim item  

    ' Create the new driver package object.  
    Set newPackage = connection.Get("SMS_DriverPackage").SpawnInstance_  

    ' Populate the new package properties.  
    newPackage.Name = newPackageName  
    newPackage.Description = newPackageDescription  
    newPackage.PkgSourceFlag = 2 ' Storage direct  
    newPackage.PkgSourcePath = newPackageSourcePath  

    ' Save the package.  
    path=newPackage.Put_  

    ' Get the newly created package (Do this to call AddDriverContent).  
    Set newPackage=connection.Get(path)  

    ' Get the driver  
    Set driver = connection.Get("SMS_Driver.CI_ID=" & driverId )  

    ' Get the driver content.  
    Set content = connection.ExecQuery("Select * from SMS_CIToContent where CI_ID=" & driverId)  

    If content.Count = 0 Then  
        Wscript.Echo "No content found"  
        Exit Sub  
    End If  

    ' Create Array to hold driver content identifiers.  
    contentIds = Array()  
    ReDim contentIds(content.Count-1)  
    index = 0  

    For Each item In content           
        contentIds(index) = item.ContentID   
        index = index+1         
    Next  

    ' Create sources path Array.  
    packageSources = Array(driver.ContentSourcePath)  
    refreshDPs = False  

    ' Add the driver content.  
    Call newPackage.AddDriverContent(contentIds,packageSources,refreshDPs)  
    wscript.echo "Done"  

End Sub  
public void CreateDriverPackage(  
    WqlConnectionManager connection,   
    int driverId,   
    string newPackageName,   
    string newPackageDescription,   
    string newPackageSourcePath)  
{  
    try  
    {  
        if (Directory.Exists(newPackageSourcePath) == false)  
        {  
            throw new DirectoryNotFoundException("Package source path does not exist");  
        }  

        // Create new package object.  
        IResultObject newPackage = connection.CreateInstance("SMS_DriverPackage");  

        IResultObject driver = connection.GetInstance("SMS_Driver.CI_ID=" + driverId);  

        newPackage["Name"].StringValue = newPackageName;  
        newPackage["Description"].StringValue = newPackageDescription;  
        newPackage["PkgSourceFlag"].IntegerValue = (int)PackageSourceFlag.StorageDirect;  
        newPackage["PkgSourcePath"].StringValue = newPackageSourcePath;  

        // Save new package and new package properties.  
        newPackage.Put();  

        newPackage.Get();  

        // Get the content identifier.  
        List<int> contentIDs = new List<int>();  
        IResultObject content = connection.QueryProcessor.ExecuteQuery("Select * from SMS_CIToContent where CI_ID=" + driverId);  

        foreach (IResultObject ro in content)  
        {  
            contentIDs.Add(ro["ContentID"].IntegerValue);  
        }  

        // Get the package source.  
        List<string> packageSources = new List<string>();  
        packageSources.Add(driver["ContentSourcePath"].StringValue);  

        Dictionary<string, Object> inParams = new Dictionary<string, object>();  

        inParams.Add("bRefreshDPs", true);  
        inParams.Add("ContentIDs", contentIDs.ToArray());  
        inParams.Add("ContentSourcePath", packageSources.ToArray());  

        newPackage.ExecuteMethod("AddDriverContent", inParams);  
    }  
    catch (SmsException ex)  
    {  
        Console.WriteLine("Failed to create package. Error: " + ex.Message);  
        throw;  
    }  
}  

Метод примера имеет следующие параметры:

Параметр Тип Описание
connection -Управляемых: WqlConnectionManager
— VBScript: SWbemServices
Допустимое подключение к поставщику SMS.
driverId -Управляемых: Integer
-Vbscript: Integer
Идентификатор драйвера (SMS_Driver.CI_ID).
newPackageName -Управляемых: String
-Vbscript: String
Имя пакета.
newPackageDescription -Управляемых: String
-Vbscript: String
Описание нового пакета.
newPackageSourcePath -Управляемых: String
-Vbscript: String
Допустимый сетевой путь UNC к драйверу.

Компиляция программы

Для этого примера на C# требуется следующее:

Пространства имен

System;

System.Collections.Generic;

System.Text

System.io

Майкрософт. ConfigurationManagement.ManagementProvider

Майкрософт. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Надежное программирование

Дополнительные сведения об обработке ошибок см. в разделе Сведения об ошибках Configuration Manager.

Безопасность .NET Framework

Дополнительные сведения о защите приложений Configuration Manager см. в статье Configuration Manager администрирование на основе ролей.

См. также

Класс WMI сервера SMS_Driver
Метод AddDriverContent в SMS_DriverPackage класса