Condividi tramite


Come assegnare un pacchetto a un punto di distribuzione

Nell'esempio seguente viene illustrato come assegnare un punto di distribuzione a un pacchetto usando le SMS_DistributionPoint classi e SMS_SystemResourceList in Configuration Manager. È necessario assegnare un punto di distribuzione a un pacchetto solo se il pacchetto contiene file di origine (PkgSourcePath). Il pacchetto non viene annunciato fino a quando i file di origine del programma non sono stati propagati a una condivisione del punto di distribuzione. È possibile usare la condivisione del punto di distribuzione predefinita oppure specificare una condivisione da usare. È anche possibile specificare più punti di distribuzione da usare per distribuire i file di origine del pacchetto, anche se questo esempio non lo dimostra.

Per assegnare un pacchetto a un punto di distribuzione

  1. Configurare una connessione al provider SMS.

  2. Creare un nuovo oggetto punto di distribuzione (non si tratta di un punto di distribuzione effettivo).

  3. Associare il pacchetto esistente al nuovo oggetto punto di distribuzione.

  4. Eseguire una query per un singolo punto di distribuzione in base al codice del sito e al nome del server specificati.

  5. Utilizzare i risultati della query per popolare la ServerNALPath proprietà dell'oggetto punto di distribuzione.

  6. Salvare l'oggetto e le proprietà del punto di distribuzione.

Esempio

Il metodo di esempio seguente assegna un pacchetto a un punto di distribuzione.

Per informazioni sulla chiamata del codice di esempio, vedere Chiamata di frammenti di codice Configuration Manager.


Sub SWDAssignPackageToDistributionPoint(connection, existingPackageID, siteCode, serverName)  

    Const wbemFlagReturnImmediately = 16  
    Const wbemFlagForwardOnly = 32  
    Dim distributionPoint  
    Dim query  
    Dim listOfResources  
    Dim resource  

    ' Create distribution point object (this is not an actual distribution point).  
    Set distributionPoint = connection.Get("SMS_DistributionPoint").SpawnInstance_  

    ' Associate the existing package with the new distribution point object.  
    distributionPoint.PackageID = existingPackageID       

    ' This query selects a single distribution point based on the provided SiteCode and ServerName.  
    query = "SELECT * FROM SMS_SystemResourceList WHERE RoleName='SMS Distribution Point' AND SiteCode='" & siteCode & "' AND ServerName='" & serverName & "'"  

    Set listOfResources = connection.ExecQuery(query, , wbemFlagForwardOnly Or wbemFlagReturnImmediately)  

    ' The query returns a collection that needs to be enumerated (although we should only get one instance back).  
    For Each resource In ListOfResources        
        distributionPoint.ServerNALPath = Resource.NALPath  
        distributionPoint.SiteCode = Resource.SiteCode          
    Next  

    ' Save the distribution point instance for the package.  
    distributionPoint.Put_   

    ' Display notification text.  
    Wscript.Echo "Assigned package: " & distributionPoint.PackageID   

End Sub  
public void AssignPackageToDistributionPoint(WqlConnectionManager connection, string existingPackageID, string siteCode, string serverName)  
{  
    try  
    {  
        // Create the distribution point object (this is not an actual distribution point).  
        IResultObject distributionPoint = connection.CreateInstance("SMS_DistributionPoint");  

        // Associate the package with the new distribution point object.   
        distributionPoint["PackageID"].StringValue = existingPackageID;  

        // This query selects a single distribution point based on the provided siteCode and serverName.  
        string query = "SELECT * FROM SMS_SystemResourceList WHERE RoleName='SMS Distribution Point' AND SiteCode='" + siteCode + "' AND ServerName='" + serverName + "'";  

        //   
        IResultObject listOfResources = connection.QueryProcessor.ExecuteQuery(query);  
        foreach (IResultObject resource in listOfResources)  
        {  
            Console.WriteLine(resource["SiteCode"].StringValue);  
            distributionPoint["ServerNALPath"].StringValue = resource["NALPath"].StringValue;  
            distributionPoint["SiteCode"].StringValue = resource["SiteCode"].StringValue;  
        }  

        // Save the distribution point object and properties.  
        distributionPoint.Put();  

        // Output package ID of assigned package.  
        Console.WriteLine("Assigned package: " + distributionPoint["PackageID"].StringValue);  
    }  

    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

swbemServices
-Gestito: WqlConnectionManager
- VBScript: SWbemServices
Connessione valida al provider SMS.
existingPackageID -Gestito: String
-Vbscript: String
ID del pacchetto esistente.
siteCode -Gestito: String
-Vbscript: String
Codice del sito.
serverName -Gestito: String
-Vbscript: String
Nome del server.

Compilazione del codice

L'esempio C# richiede:

Namespaces

Sistema

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

adminui.wqlqueryengine

microsoft.configurationmanagement.managementprovider

Mscorlib

Programmazione efficiente

Per altre informazioni sulla gestione degli errori, vedere Informazioni sugli errori di Configuration Manager.

Vedere anche

Panoramica della distribuzione softwareInformazioni sul file di controllo del sitoSMS_SCI_Component classe WMI del server
Classe WMI del server SMS_SystemResourceList