Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Un pacchetto per un driver di distribuzione del sistema operativo viene creato in Configuration Manager mediante la creazione di un oggetto classe WMI del server SMS_DriverPackage. Per aggiungere un driver al pacchetto, chiamare il metodo AddDriverContent nella classe SMS_DriverPackage.
I pacchetti driver vengono usati per archiviare il contenuto associato ai driver. Quando si crea un pacchetto driver, il percorso di origine deve essere inizialmente una condivisione vuota a cui il provider SMS ha accesso in lettura e scrittura. Quando un driver viene aggiunto a un pacchetto driver, utilizzando AddDriverContent, il provider SMS copierà il contenuto dal percorso di origine del driver a una sottodirectory nella condivisione del pacchetto driver.
È necessario aggiungere il contenuto associato a un driver a un pacchetto driver e assegnarlo a un punto di distribuzione prima che il client possa usarlo. Si ottiene il contenuto del driver dall'oggetto classe WMI del server SMS_CIToContent in cui la CI_ID proprietà corrisponde all'identificatore del driver.
Nota
È possibile che più driver condividano lo stesso contenuto. Ciò si verifica in genere quando sono presenti più file INF nella stessa directory.
AddDriverContent Può essere usato per aggiungere più driver contemporaneamente a un pacchetto. A tale scopo, aggiungi più ID contenuto. Il bRefreshDPs parametro deve essere impostato su false se verrà effettuata un'altra chiamata. In questo modo si garantisce che il pacchetto venga aggiornato nel punto di distribuzione una sola volta.
Quando si chiama AddDriverContent, si specifica un set di percorsi di origine del pacchetto. In genere si tratta della proprietà dell'oggetto ContentSourcePathclasse WMI del server SMS_Driver, ma può essere ignorata se il provider non ha accesso al percorso di origine originale.
Per creare un pacchetto driver e aggiungere il contenuto del driver
Configurare una connessione al provider SMS. Per altre informazioni, vedere Nozioni fondamentali sul provider SMS.
Creare un oggetto SMS_DriverPackage .
Imposta la
PkgSourceFlagproprietà dell'oggettoSMS_DriverPackagesu2(Archiviazione diretta).Esegui il commit dell'oggetto
SMS_DriverPackage.Ottieni l'oggetto
SMS_DriverPackage.Inserire l'elenco dei driver da aggiungere al pacchetto nel metodo
ContentIDsAddDriverContent nel parametro.Inserire l'elenco dei percorsi dell'origine
AddDriverContentdel contenuto del driver nel metodoContentSourcePathnel parametro.Chiamare il
AddDriverContentmetodo.Chiamare il metodo RefreshPkgSource nella classe SMS_DriverPackage per completare l'operazione.
Assegnare il pacchetto driver a un punto di distribuzione. Per altre informazioni, vedere Come assegnare un pacchetto a un punto di distribuzione.
Esempio
Il metodo di esempio seguente crea un pacchetto per un identificatore del driver fornito, rappresentato dalla CI_ID proprietà dell'oggetto SMS_Driver Server WMI Class . Il metodo accetta anche un nuovo nome di pacchetto, una descrizione e un nuovo percorso di origine del pacchetto come parametri.
Nota
Il packageSourcePath parametro deve essere fornito come percorso di rete UNC (Universal Naming Convention), ad esempio \\localhost\Drivers\ATIVideo\.
Per informazioni sulla chiamata del codice di esempio, vedere Chiamata di frammenti di codice di 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;
}
}
Il metodo di esempio include i parametri seguenti:
| Parametro | Tipo | Descrizione |
|---|---|---|
connection |
- Gestito: WqlConnectionManager- VBScript: SWbemServices |
Una connessione valida al provider SMS. |
driverId |
- Gestito: Integer- VBScript: Integer |
L'identificatore del driver (SMS_Driver.CI_ID). |
newPackageName |
- Gestito: String- VBScript: String |
Nome del pacchetto. |
newPackageDescription |
- Gestito: String- VBScript: String |
Descrizione per il nuovo pacchetto. |
newPackageSourcePath |
- Gestito: String- VBScript: String |
Percorso di rete UNC valido per il driver. |
Compilazione del codice
Questo esempio di C# richiede:
Spazi dei nomi
Sistema
System.Collections.Generic
System.Text
System.IO
Microsoft.ConfigurationManagementManagementProvider
Microsoft.ConfigurationManagementManagementProvider.WqlQueryEngine
Assembly
Microsoft.ConfigurationManagement.ManagementProvider
adminui.wqlqueryengine
Programmazione efficiente
Per altre informazioni sulla gestione degli errori, vedere Informazioni sugli errori di Configuration Manager.
Sicurezza di .NET Framework
Per altre informazioni sulla protezione delle applicazioni di Configuration Manager, vedere Amministrazione basata sui ruoli di Configuration Manager.
Vedere anche
Metodo AddDriverContent della classe WMI del server SMS_Drivernella classe SMS_DriverPackage