Een Windows-stuurprogramma importeren dat wordt beschreven door een INF-bestand in Configuration Manager
U kunt een Windows-stuurprogramma importeren dat wordt beschreven door een informatiebestand (.inf) in Configuration Manager met behulp van de methode CreateFromINF in Klasse SMS_Driver.
Een Windows-stuurprogramma importeren
Een verbinding met de SMS-provider instellen. Zie Basisprincipes van SMS-provider voor meer informatie.
Roep de methode CreateFromINF aan in klasse SMS_Driver om het basisobject WMI-klassebeheer van de eerste SMS_Driver Server op te halen.
Maak een exemplaar van SMS_Driver met behulp van het beheerbasisobject.
Vul het
SMS_Driver
object in.Voer het object door
SMS_Driver
.
Voorbeeld
Met de volgende voorbeeldmethode wordt een SMS_Driver
object voor een Windows-stuurprogramma gemaakt met behulp van het opgegeven pad en de bestandsnaam. In het voorbeeld wordt het stuurprogramma ook ingeschakeld door de waarde van de IsEnabled
eigenschap in te stellen op true
. De helperfunctie GetDriverName
wordt gebruikt om de naam van het stuurprogramma op te halen uit het XML-stuurprogrammapakket.
Opmerking
De path
parameter moet worden opgegeven als een UNC-netwerkpad (Universal Naming Convention), bijvoorbeeld \\localhost\Drivers\ATIVideo\.
In het voorbeeld is de LocaleID
eigenschap vastgelegd in het Engels (VS). Als u de landinstelling nodig hebt voor niet-Amerikaanse installaties kunt u deze ophalen via de WMI-klasse-eigenschapLocaleID
SMS_Identification-server.
Zie Configuration Manager-codefragmenten aanroepen voor meer informatie over het aanroepen van de voorbeeldcode.
Sub ImportINFDriver(connection, path, name)
Dim driverClass
Dim inParams
Dim outParams
On Error Resume Next
' Obtain an instance of the class
' using a key property value.
Set driverClass = connection.Get("SMS_Driver")
' Obtain an InParameters object specific
' to the method.
Set inParams = driverClass.Methods_("CreateFromINF"). _
inParameters.SpawnInstance_()
' Add the input parameters.
inParams.Properties_.Item("DriverPath") = path
inParams.Properties_.Item("INFFile") = name
' Call the method.
' The OutParameters object in outParams
' is created by the provider.
Set outParams = connection.ExecMethod("SMS_Driver", "CreateFromINF", inParams)
If Err <> 0 Then
Wscript.Echo "Failed to add to the driver catalog: " + path + "\" + name
Exit Sub
End If
outParams.Driver.IsEnabled = True
Dim LocalizedSettings(0)
Set LocalizedSettings(0) = connection.Get("SMS_CI_LocalizedProperties").SpawnInstance_()
LocalizedSettings(0).Properties_.item("LocaleID") = 1033
LocalizedSettings(0).Properties_.item("DisplayName") = _
GetDriverName(outParams.Driver.SDMPackageXML, "//DisplayName", "Text")
LocalizedSettings(0).Properties_.item("Description") = ""
outParams.Driver.LocalizedInformation = LocalizedSettings
' Save the driver.
outParams.Driver.Put_
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 ImportInfDriver(
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("INFFile", name);
// Import the INF file.
IResultObject result = connection.ExecuteMethod("SMS_Driver", "CreateFromINF", inParams);
// Create the SMS_Driver driver instance from the management base object returned in result["Driver"].
IResultObject driver = connection.CreateInstance(result["Driver"].ObjectValue);
// Enable the driver.
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;
}
De voorbeeldmethode heeft de volgende parameters:
Parameter | Type | Beschrijving |
---|---|---|
connection |
-Beheerd: WqlConnectionManager - VBScript: SWbemServices |
Een geldige verbinding met de SMS-provider. |
path |
-Beheerd: String - VBScript: String |
Een geldig UNC-netwerkpad naar de map met de inhoud van het stuurprogramma. Bijvoorbeeld \\Servers\Driver\VideoDriver. |
name |
-Beheerd: String - VBScript: String |
De naam van het .inf-bestand. Bijvoorbeeld ATI.inf. |
De code compileren
Voor dit C#-voorbeeld is het volgende vereist:
Naamruimten
Systeem
System.Collections.Generic
System.Text
Microsoft.ConfigurationManagement.ManagementProvider
Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine
Vergadering
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
Robuust programmeren
Zie Over Configuration Manager-fouten voor meer informatie over foutafhandeling.
.NET Framework-beveiliging
Zie Op rollen gebaseerd beheer van Configuration Manager voor meer informatie over het beveiligen van Configuration Manager-toepassingen.
Zie ook
Methode CreateFromINF in klasse SMS_Driver
WMI-klasse SMS_Driver-server
De ondersteunde platforms voor een stuurprogramma opgeven