Cómo crear un paquete de controladores para un controlador de Windows en Configuration Manager

Cree un paquete para un controlador de implementación del sistema operativo, en Configuration Manager, mediante la creación de un objeto SMS_DriverPackage clase WMI de servidor. Para agregar un controlador al paquete, llame al método AddDriverContent en la clase SMS_DriverPackage.

Los paquetes de controladores se usan para almacenar el contenido asociado a los controladores. Al crear un paquete de controladores, la ubicación de origen debe ser inicialmente un recurso compartido vacío al que el proveedor de SMS tiene acceso de lectura y escritura. Cuando se agrega un controlador a un paquete de controladores, mediante AddDriverContent, el proveedor de SMS copiará el contenido de la ubicación de origen del controlador en un subdirectorio del recurso compartido del paquete del controlador.

Es necesario agregar el contenido asociado a un controlador a un paquete de controladores y asignarlo a un punto de distribución antes de que el cliente pueda usarlo. Obtiene el contenido del controlador del objeto SMS_CIToContent Clase WMI de servidor donde la CI_ID propiedad coincide con el identificador del controlador.

Nota:

Es posible que varios controladores compartan el mismo contenido. Esto suele ocurrir cuando hay varios archivos .inf en el mismo directorio.

AddDriverContent se puede usar para agregar varios controladores a un paquete simultáneamente. Para ello, agregue varios identificadores de contenido. El bRefreshDPs parámetro debe establecerse en false si se realizará otra llamada. Esto garantiza que el paquete solo se actualiza una vez en el punto de distribución.

Cuando se llama a AddDriverContent, se especifica un conjunto de ubicaciones de origen del paquete. Normalmente, se trata de la propiedad de objeto ContentSourcePathde clase WMI de servidor SMS_Driver, pero se puede invalidar si el proveedor no tiene acceso a la ubicación de origen original.

Para crear un paquete de controladores y agregar contenido de controlador

  1. Configure una conexión con el proveedor de SMS. Para obtener más información, consulte Aspectos básicos del proveedor de SMS.

  2. Cree un objeto SMS_DriverPackage .

  3. Establezca la PkgSourceFlag propiedad del SMS_DriverPackage objeto en 2 (Storage Direct).

  4. Confirme el SMS_DriverPackage objeto .

  5. Obtenga el SMS_DriverPackage objeto .

  6. Coloque la lista de controladores que desea agregar al paquete en el método ContentIDsAddDriverContent en el parámetro .

  7. Coloque la lista de rutas de acceso de origen de contenido del controlador en el método ContentSourcePath en el AddDriverContent parámetro .

  8. Llame al AddDriverContent método .

  9. Llame al método RefreshPkgSource en la clase SMS_DriverPackage para completar la operación.

  10. Asigne el paquete del controlador a un punto de distribución. Para obtener más información, vea Cómo asignar un paquete a un punto de distribución.

Ejemplo

El siguiente método de ejemplo crea un paquete para un identificador de controlador proporcionado, representado por la CI_ID propiedad del objeto SMS_Driver clase WMI de servidor . El método también toma un nuevo nombre de paquete, una descripción y una ruta de acceso de origen del paquete como parámetros.

Nota:

El packageSourcePath parámetro debe proporcionarse como una ruta de acceso de red de convención de nomenclatura universal (UNC), por ejemplo, \\localhost\Drivers\ATIVideo\.

Para obtener información sobre cómo llamar al código de ejemplo, vea Llamar a fragmentos de código de 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;  
    }  
}  

El método de ejemplo tiene los parámetros siguientes:

Parámetro Tipo Descripción
connection -Administrado: WqlConnectionManager
- VBScript: SWbemServices
Una conexión válida al proveedor de SMS.
driverId -Administrado: Integer
-Vbscript: Integer
Identificador del controlador (SMS_Driver.CI_ID).
newPackageName -Administrado: String
-Vbscript: String
Nombre del paquete.
newPackageDescription -Administrado: String
-Vbscript: String
Descripción del nuevo paquete.
newPackageSourcePath -Administrado: String
-Vbscript: String
Ruta de acceso de red UNC válida al controlador.

Compilar el código

Este ejemplo de C# requiere:

Espacios de nombres

System

System.Collections.Generic

System.Text

System.IO

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Ensamblado

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Programación sólida

Para obtener más información sobre el control de errores, consulte Acerca de los errores de Configuration Manager.

Seguridad de .NET Framework

Para obtener más información sobre la protección de aplicaciones Configuration Manager, consulte Configuration Manager administración basada en roles.

Consulta también

SMS_Driver clase WMI de servidor
Método AddDriverContent en la clase SMS_DriverPackage