Partager via


Comment affecter un package à un point de distribution

L’exemple suivant montre comment affecter un point de distribution à un package à l’aide des SMS_DistributionPoint classes et SMS_SystemResourceList dans Configuration Manager. Vous devez uniquement affecter un point de distribution à un package si le package contient des fichiers sources (PkgSourcePath). Le package n’est pas publié tant que les fichiers sources du programme n’ont pas été propagés à un partage de point de distribution. Vous pouvez utiliser le partage de point de distribution par défaut ou spécifier un partage à utiliser. Vous pouvez également spécifier plusieurs points de distribution à utiliser pour distribuer vos fichiers sources de package, bien que cet exemple ne le montre pas.

Pour affecter un package à un point de distribution

  1. Configurez une connexion au fournisseur SMS.

  2. Créez un objet de point de distribution (il ne s’agit pas d’un point de distribution réel).

  3. Associez le package existant au nouvel objet de point de distribution.

  4. Recherchez un point de distribution unique en fonction du code de site et du nom de serveur fournis.

  5. Utilisez les résultats de la requête pour remplir la ServerNALPath propriété de l’objet de point de distribution.

  6. Enregistrez l’objet et les propriétés du point de distribution.

Exemple

L’exemple de méthode suivant affecte un package à un point de distribution.

Pour plus d’informations sur l’appel de l’exemple de code, consultez Appel d’extraits de code 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;  
    }  
}  

L’exemple de méthode a les paramètres suivants :

Paramètre Type Description
connection

swbemServices
-Géré: WqlConnectionManager
- VBScript : SWbemServices
Connexion valide au fournisseur SMS.
existingPackageID -Géré: String
-Vbscript: String
ID du package existant.
siteCode -Géré: String
-Vbscript: String
Code du site.
serverName -Géré: String
-Vbscript: String
Nom du serveur.

Compilation du code

L’exemple C# nécessite :

Espaces de noms

Système

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

adminui.wqlqueryengine

microsoft.configurationmanagement.managementprovider

mscorlib

Programmation robuste

Pour plus d’informations sur la gestion des erreurs, consultez À propos des erreurs Configuration Manager.

Voir aussi

Vue d’ensemble de la distribution de logicielsÀ propos du fichier de contrôle de siteSMS_SCI_Component Classe WMI du serveur
Classe WMI du serveur SMS_SystemResourceList