Configuration Managerの Txtsetup.oem ファイルで記述されている Windows ドライバーをインポートする場合は、クラス SMS_Driverの CreateFromOEM メソッドを使用します。 Configuration Managerは、.inf ファイルからほとんどのドライバーの定義を自動的に作成できます。 ただし、Windows Vista より前のオペレーティング システムに大容量記憶装置ドライバーをインストールする場合は、txtsetup.oem ファイルに含まれる情報もConfiguration Manager必要があります。 これを容易にするために、 CreateFromOEM
Txtsetup.oem ファイルで参照されている .inf ファイルごとに 、SMS_Driver Server WMI クラス オブジェクトを作成します。 その後、ドライバーのプロパティを保存する前にカスタマイズする機会があります。
注:
ドライバーの製造元が Txtsetup.oem ファイルを提供している場合は、Windows 2000、Windows XP、または Windows Server 2003 を展開する予定の場合は、.inf ファイルの代わりにこの手順を使用してドライバーをインポートする必要があります。
Windows ドライバーをインポートするには
SMS プロバイダーへの接続を設定します。 詳細については、「 SMS プロバイダーの基礎」を参照してください。
SMS_Driver クラス CreateFromOEM メソッドを呼び出して、管理ベース オブジェクトのコレクションを取得します。
管理ベース オブジェクトの場合は、ドライバーごとにSMS_Driver オブジェクトを作成します。
SMS_Driver オブジェクトを設定します。
SMS_Driver オブジェクトをコミットします。
例
次のメソッド例では、指定されたパスと Txtsetup.oem ファイル名を使用して、Windows ドライバーの SMS_Driver オブジェクトを作成します。 この例では、 IsEnabled プロパティの値を に true
設定してドライバーを有効にすることもできます。 ヘルパー関数 GetDriverName
は、ドライバー パッケージ XML からドライバーの名前を取得するために使用されます。
注:
パラメーターは path
、\\localhost\Drivers\VMSCSI\ など、汎用名前付け規則 (UNC) ネットワーク パスとして指定する必要があります。
この例では、 LocaleID
プロパティは英語 (米国) にハードコーディングされています。 米国以外のロケールが必要な場合。インストールでは、 SMS_Identification サーバー WMI クラスLocaleID
プロパティから取得できます。
サンプル コードの呼び出しについては、「Configuration Manager コード スニペットの呼び出し」を参照してください。
Sub ImportOemDriver(connection,path,name)
Dim inParams
Dim outParams
Dim driver
Dim driverClass
On Error Resume Next
Set driverClass = connection.Get("SMS_Driver")
Set inParams = driverClass.Methods_("CreateFromOEM").inParameters.SpawnInstance_()
' Set the driver path and INF file.
inParams.Properties_.item("DriverPath") = path
inParams.Properties_.item("OEMFile") = name
' Execute the method.
Set outParams = driverClass.ExecMethod_("CreateFromOEM", inParams)
If Err <> 0 Then
Wscript.Echo "Failed to import driver: " + path +"\" + name
Exit Sub
End If
For Each driver In outParams.Drivers
' Set driver name and enable the driver.
Dim LocalizedSettings
LocalizedSettings = array(0)
Set LocalizedSettings(0) = connection.Get("SMS_CI_LocalizedProperties").SpawnInstance_()
LocalizedSettings(0).Properties_.item("LocaleID") = 1033
LocalizedSettings(0).Properties_.item("DisplayName") = _
GetDriverName(driver.Properties_.item("SDMPackageXML"), "//DisplayName", "Text")
LocalizedSettings(0).Properties_.item("Description") = ""
driver.Properties_.item("LocalizedInformation") = LocalizedSettings
driver.Properties_.item("IsEnabled") = true
driver.Put_
Next
End Sub
Function GetDriverName(xmlContent, nodeName, attributeName)
' Load the XML Document
Dim attrValue
Dim XMLDoc
Dim objNode
Dim displayNameNode
attrValue = ""
Set XMLDoc = CreateObject("Microsoft.XMLDOM")
XMLDoc.async = False
XMLDoc.loadXML(xmlContent)
'Check for a successful load of the XML Document.
If xmlDoc.parseError.errorCode <> 0 Then
WScript.Echo vbcrlf & "Error loading XML Document. Error Code : 0x" & hex(xmldoc.parseerror.errorcode)
WScript.Echo "Reason: " & xmldoc.parseerror.reason
WScript.Echo "Parse Error line " & xmldoc.parseError.line & ", character " & _
xmldoc.parseError.linePos & vbCrLf & xmldoc.parseError.srcText
GetXMLAttributeValue = ""
Else
' Select the node
Set objNode = xmlDoc.SelectSingleNode(nodeName)
If Not objNode Is Nothing Then
' Found the element, now just pick up the Text attribute value
Set displayNameNode = objNode.attributes.getNamedItem(attributeName)
If Not displayNameNode Is Nothing Then
attrValue = displayNameNode.value
Else
WScript.Echo "Attribute not found"
End If
Else
WScript.Echo "Failed to locate " & nodeName & " element."
End If
End If
' Save the results
GetDriverName = attrValue
End Function
public void ImportOemDriver(
WqlConnectionManager connection,
string path,
string name)
{
try
{
Dictionary<string, object> inParams = new Dictionary<string, object>();
// Set up parameters for the path and file name.
inParams.Add("DriverPath", path);
inParams.Add("OEMFile", name);
// Import the INF file.
IResultObject outParams = connection.ExecuteMethod("SMS_Driver", "CreateFromOEM", inParams);
// Create the driver instance from the management base object returned in result["Drivers"].
foreach (object obj in outParams["Drivers"].ObjectArrayValue)
{
IResultObject driver = connection.CreateInstance(obj);
driver["IsEnabled"].BooleanValue = true;
List<IResultObject> driverInformationList = driver.GetArrayItems("LocalizedInformation");
// Set up the display name and other information.
IResultObject driverInfo = connection.CreateEmbeddedObjectInstance("SMS_CI_LocalizedProperties");
driverInfo["DisplayName"].StringValue = GetDriverName(driver);
driverInfo["LocaleID"].IntegerValue = 1033;
driverInfo["Description"].StringValue = "";
driverInformationList.Add(driverInfo);
driver.SetArrayItems("LocalizedInformation", driverInformationList);
// Commit the SMS_Driver object.
driver.Put();
}
}
catch (SmsException e)
{
Console.WriteLine("Failed to import driver: " + e.Message);
throw;
}
}
public string GetDriverName(IResultObject driver)
{
// Extract
XmlDocument sdmpackage = new XmlDocument();
sdmpackage.LoadXml(driver.Properties["SDMPackageXML"].StringValue);
// Iterate over all the <DisplayName/> tags.
foreach (XmlNode displayName in sdmpackage.GetElementsByTagName("DisplayName"))
{
// Grab the first one with a Text attribute not equal to null.
if (displayName != null && displayName.Attributes["Text"] != null
&& !string.IsNullOrEmpty(displayName.Attributes["Text"].Value))
{
// Return the DisplayName text.
return displayName.Attributes["Text"].Value;
}
}
// Default the driverName to the UniqueID.
return driver["CI_UniqueID"].StringValue;
}
このメソッドの例には、次のパラメーターがあります。
パラメーター | 型 | 説明 |
---|---|---|
Connection |
-管理: WqlConnectionManager - VBScript: SWbemServices |
SMS プロバイダーへの有効な接続。 |
path |
-管理: String -Vbscript: String |
ドライバーの内容を含むフォルダーへの有効な UNC ネットワーク パス。 たとえば、\\Servers\Driver\VideoDriver です。 |
name |
-管理: String -Vbscript: String |
Txtsetup.oem ファイルの名前。 たとえば、\\server\drivers\Video for と Txtsetup.oem for path があると name します。 |
コードのコンパイル
この 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」を参照してください。