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 ContentSourcePath
classe 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
Configure uma conexão com o Provedor de SMS. Para obter mais informações, confira Os fundamentos do Provedor de SMS.
Crie um objeto SMS_DriverPackage .
Defina a
PkgSourceFlag
propriedade doSMS_DriverPackage
objeto como2
(Storage Direct).Confirme o
SMS_DriverPackage
objeto.Obtenha o
SMS_DriverPackage
objeto.Coloque a lista de drivers que você deseja adicionar ao pacote no método
ContentIDs
AddDriverContent no parâmetro.Coloque a lista de caminhos de origem de conteúdo do driver no
AddDriverContent
métodoContentSourcePath
no parâmetro.Chame o
AddDriverContent
método.Chame o Método RefreshPkgSource na classe SMS_DriverPackage para concluir a operação.
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