如何将类别添加到 Windows 驱动程序
在 Configuration Manager中,通过将类别的唯一标识符添加到 SMS_Driver Server WMI 类CategoryInstance_UniqueIDs
数组属性,将类别添加到 Windows 驱动程序。 数组包含一个或多个与 SMS_CategoryInstance 服务器 WMI 类CategoryInstance_UniqueID
属性值匹配的字符串标识符。 系统中的每个类别都有 一个 SMS_CategoryInstance 服务器 WMI 类 对象的实例。
注意
驱动程序类别的唯一标识符前面附加了文本“DriverCategories”。 其他类别类型具有不同的文本。
类别具有本地化信息,它是从 SMS_CategoryInstance 服务器 WMI 类LocalizedCategoryInstanceName
属性获取类别的显示名称。
向 Windows 驱动程序添加类别
设置与 SMS 提供程序的连接。 有关详细信息,请参阅 SMS 提供程序基础知识。
获取要向其添加类别的驱动程序 的 SMS_Driver 对象。
从与所需类别匹配的 SMS_CategoryInstance 服务器 WMI 类 对象获取类别名称标识符。
将类别标识符添加到 SMS_Driver 服务器 WMI 类 对象
CategoryInstance_UniqueIDs
数组属性。提交 SMS_Driver服务器 WMI 类 更改。
示例
以下示例方法将类别添加到 Windows 驱动程序。
driverID
是有效的 SMS_Driver服务器 WMI 类 对象。 有关详细信息,请参阅 关于操作系统部署驱动程序管理。
有关调用示例代码的信息,请参阅调用Configuration Manager代码片段。
Sub AddDriverCategory(connection,driver,categoryName)
Dim categories
Dim category
Dim driverCategoryID
Dim categoryID
Dim results
Dim existingCategory
' Find the category that matches the supplied category name.
Set results = _
connection.ExecQuery("SELECT * From SMS_CategoryInstance WHERE LocalizedCategoryInstanceName = '" _
+ categoryName+ "'")
' If the category was found, add it to the driver.
For Each category in results
If IsNull(driver.CategoryInstance_UniqueIDs) or UBound (driver.CategoryInstance_UniqueIDs) = -1 Then
' It is empty. Add the category.
driver.CategoryInstance_UniqueIDs = Array(category.CategoryInstance_UniqueID)
Else
' Determine if the category is already applied to the driver.
For each existingCategory in driver.CategoryInstance_UniqueIDs
if existingCategory = category.CategoryInstance_UniqueID Then
WScript.Echo "Already added"
Exit Sub
End If
Next
' Add the category.
categories = driver.CategoryInstance_UniqueIDs
Redim Preserve categories (UBound (driver.CategoryInstance_UniqueIDs)+1)
categories (Ubound (categories)) = category.CategoryInstance_UniqueID
driver.CategoryInstance_UniqueIDs = categories
End If
driver.Put_
Next
End Sub
public void AddDriverCategory(
WqlConnectionManager connection,
IResultObject driver,
string categoryName)
{
try
{
// Get the category.
IResultObject results = connection.QueryProcessor.ExecuteQuery(
"SELECT * From SMS_CategoryInstance WHERE LocalizedCategoryInstanceName = '" + categoryName + "'");
ArrayList driverCategories = new ArrayList(driver["CategoryInstance_UniqueIDs"].StringArrayValue);//;driverCategories);
foreach (IResultObject category in results)
{
foreach (string driverCategory in driverCategories)
{
// Do nothing if the driver already has the category.
if (driverCategory == category["CategoryInstance_UniqueID"].StringValue)
{
Console.WriteLine("Already exists");
return;
}
}
// Add the category to the action.
driverCategories.Add(category["CategoryInstance_UniqueID"].StringValue);
}
// Update the driver.
driver["CategoryInstance_UniqueIDs"].StringArrayValue = (string[])driverCategories.ToArray(typeof(string));
driver.Put();
}
catch (SmsException e)
{
Console.WriteLine("Failed to add the category" + e.Message);
throw;
}
}
示例方法具有以下参数:
参数 | 类型 | 说明 |
---|---|---|
Connection |
-管理: WqlConnectionManager - VBScript: SWbemServices |
与 SMS 提供程序的有效连接。 |
driver |
-管理: IResultObject - VBScript: SWbemObject |
Windows 驱动程序。 它是 SMS_Driver服务器 WMI 类的实例。 |
categoryName |
-管理: String - VBScript: String |
现有类别的名称。 这与 SMS_CategoryInstance 服务器 WMI 类LocalizedCategoryInstanceName 属性匹配。 |
编译代码
此 C# 示例需要:
命名空间
System
System.Collections.Generic
System.Text
Microsoft。ConfigurationManagement.ManagementProvider
Microsoft。ConfigurationManagement.ManagementProvider.WqlQueryEngine
Assembly
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
可靠编程
有关错误处理的详细信息,请参阅关于Configuration Manager错误。
.NET Framework 安全性
有关保护Configuration Manager应用程序的详细信息,请参阅Configuration Manager基于角色的管理。