次の方法で共有


Txtsetup.oem ファイルで記述された Windows ドライバーを Configuration Manager にインポートする方法

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 ドライバーをインポートするには

  1. SMS プロバイダーへの接続を設定します。 詳細については、「 SMS プロバイダーの基礎」を参照してください。

  2. SMS_Driver クラス CreateFromOEM メソッドを呼び出して、管理ベース オブジェクトのコレクションを取得します。

  3. 管理ベース オブジェクトの場合は、ドライバーごとにSMS_Driver オブジェクトを作成します。

  4. SMS_Driver オブジェクトを設定します。

  5. 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」を参照してください。

関連項目

ドライバーでサポートされているプラットフォームを指定する方法