Создание пакета драйверов для драйвера 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, но его можно переопределить, если у поставщика нет доступа к исходному исходному расположению.
Создание пакета драйверов и добавление содержимого драйвера
Настройте подключение к поставщику SMS. Дополнительные сведения см. в статье Основы поставщика SMS.
Создайте объект SMS_DriverPackage .
PkgSourceFlag
Задайте для свойстваSMS_DriverPackage
объекта значение2
(Storage Direct).Зафиксируйте
SMS_DriverPackage
объект .SMS_DriverPackage
Получите объект .Поместите список драйверов, которые нужно добавить в пакет, в метод
ContentIDs
AddDriverContent в параметре .Поместите список путей к источнику содержимого драйвера в метод
ContentSourcePath
вAddDriverContent
параметре .AddDriverContent
Вызовите метод .Вызовите метод RefreshPkgSource в классе SMS_DriverPackage , чтобы завершить операцию.
Назначьте пакет драйвера точке распространения. Дополнительные сведения см. в статье Назначение пакета точке распространения.
Пример
В следующем примере метода создается пакет для предоставленного идентификатора драйвера, представленного свойством 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 класса