Compartilhar via


Como criar um pacote de driver para um Driver do Windows no Configuration Manager

Você cria um pacote para um driver de implantação do sistema operacional, em Configuration Manager, criando um objeto SMS_DriverPackage Classe WMI do Servidor. Para adicionar um driver ao pacote, você chama o Método AddDriverContent na classe SMS_DriverPackage.

Os pacotes de driver são usados para armazenar o conteúdo associado aos drivers. Ao criar um pacote de driver, o local de origem deve ser inicialmente um compartilhamento vazio ao qual o Provedor de SMS leu e grava o acesso. Quando um driver é adicionado a um pacote de driver, usando AddDriverContent, o Provedor de SMS copiará o conteúdo do local de origem do driver para um subdiretório no compartilhamento de pacotes do driver.

É necessário adicionar o conteúdo associado a um driver a um pacote de driver e atribuí-lo a um ponto de distribuição antes que o cliente possa usá-lo. Você obtém o conteúdo do driver do objeto classe WMI do servidor SMS_CIToContent em que a CI_ID propriedade corresponde ao identificador do driver.

Observação

É possível que vários drivers compartilhem o mesmo conteúdo. Isso normalmente acontece quando há vários arquivos .inf no mesmo diretório.

AddDriverContent pode ser usado para adicionar vários drivers a um pacote simultaneamente. Para fazer isso, adicione várias IDs de conteúdo. O bRefreshDPs parâmetro deve ser definido como false se outra chamada for feita. Isso garante que o pacote só seja atualizado no ponto de distribuição uma vez.

Quando você chama AddDriverContent, você especifica um conjunto de locais de origem do pacote. Normalmente, essa é a propriedade de objeto ContentSourcePathclasse WMI do SMS_Driver Server, mas pode ser substituída se o provedor não tiver acesso ao local de origem original.

Para criar um pacote de driver e adicionar conteúdo do driver

  1. Configure uma conexão com o Provedor de SMS. Para obter mais informações, confira Os fundamentos do Provedor de SMS.

  2. Crie um objeto SMS_DriverPackage .

  3. Defina a PkgSourceFlag propriedade do SMS_DriverPackage objeto como 2 (Storage Direct).

  4. Confirme o SMS_DriverPackage objeto.

  5. Obtenha o SMS_DriverPackage objeto.

  6. Coloque a lista de drivers que você deseja adicionar ao pacote no método ContentIDsAddDriverContent no parâmetro.

  7. Coloque a lista de caminhos de origem de conteúdo do driver no AddDriverContent método ContentSourcePath no parâmetro.

  8. Chame o AddDriverContent método.

  9. Chame o Método RefreshPkgSource na classe SMS_DriverPackage para concluir a operação.

  10. Atribua o pacote de driver a um ponto de distribuição. Para obter mais informações, consulte Como atribuir um pacote a um ponto de distribuição.

Exemplo

O método de exemplo a seguir cria um pacote para um identificador de driver fornecido, representado pela CI_ID propriedade do objeto classe WMI do servidor SMS_Driver . O método também usa um novo nome de pacote, descrição e caminho de origem do pacote como parâmetros.

Observação

O packageSourcePath parâmetro deve ser fornecido como um caminho de rede UNC (Convenção Universal de Nomenclatura), por exemplo, \\localhost\Drivers\ATIVideo\.

Para obter informações sobre como chamar o código de exemplo, consulte Chamando Configuration Manager Snippets de Código.

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

O método de exemplo tem os seguintes parâmetros:

Parâmetro Tipo Descrição
connection -Gerenciado: WqlConnectionManager
- VBScript: SWbemServices
Uma conexão válida com o provedor de SMS.
driverId -Gerenciado: Integer
-Vbscript: Integer
O identificador do driver (SMS_Driver.CI_ID).
newPackageName -Gerenciado: String
-Vbscript: String
O nome do pacote.
newPackageDescription -Gerenciado: String
-Vbscript: String
Uma descrição do novo pacote.
newPackageSourcePath -Gerenciado: String
-Vbscript: String
Um caminho de rede UNC válido para o driver.

Compilando o código

Este exemplo de C# requer:

Namespaces

System

System.Collections.Generic

System.Text

System.io

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Programação robusta

Para obter mais informações sobre o tratamento de erros, consulte Sobre erros de Configuration Manager.

Segurança do .NET Framework

Para obter mais informações sobre como proteger aplicativos Configuration Manager, consulte Configuration Manager administração baseada em função.

Confira também

Classe WMI do servidor SMS_Driver
Método AddDriverContent na classe SMS_DriverPackage