Compartilhar via


Como atribuir um pacote a um ponto de distribuição

O exemplo a seguir mostra como atribuir um ponto de distribuição a um pacote usando as SMS_DistributionPoint classes e SMS_SystemResourceList em Configuration Manager. Você só precisa atribuir um ponto de distribuição a um pacote se o pacote contiver arquivos de origem (PkgSourcePath). O pacote não é anunciado até que os arquivos de origem do programa tenham sido propagados para um compartilhamento de ponto de distribuição. Você pode usar o compartilhamento de ponto de distribuição padrão ou especificar um compartilhamento a ser usado. Você também pode especificar mais de um ponto de distribuição a ser usado para distribuir os arquivos de origem do pacote, embora este exemplo não demonstre isso.

Para atribuir um pacote a um ponto de distribuição

  1. Configure uma conexão com o Provedor de SMS.

  2. Crie um novo objeto de ponto de distribuição (este não é um ponto de distribuição real).

  3. Associe o pacote existente ao novo objeto de ponto de distribuição.

  4. Consulta para um único ponto de distribuição com base no código do site e no nome do servidor fornecidos.

  5. Use os resultados da consulta para preencher a ServerNALPath propriedade do objeto do ponto de distribuição.

  6. Salve o objeto e as propriedades do ponto de distribuição.

Exemplo

O método de exemplo a seguir atribui um pacote a um ponto de distribuição.

Para obter informações sobre como chamar o código de exemplo, consulte Chamando Configuration Manager Snippets de Código.


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;  
    }  
}  

O método de exemplo tem os seguintes parâmetros:

Parâmetro Tipo Descrição
connection

swbemServices
-Gerenciado: WqlConnectionManager
- VBScript: SWbemServices
Uma conexão válida com o provedor de SMS.
existingPackageID -Gerenciado: String
-Vbscript: String
A ID do pacote existente.
siteCode -Gerenciado: String
-Vbscript: String
O código do site.
serverName -Gerenciado: String
-Vbscript: String
O nome do servidor.

Compilando o código

O exemplo C# requer:

Namespaces

Sistema

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

adminui.wqlqueryengine

microsoft.configurationmanagement.managementprovider

Mscorlib

Programação robusta

Para obter mais informações sobre o tratamento de erros, consulte Sobre erros de Configuration Manager.

Confira também

Visão geral da distribuição desoftware Sobre o arquivo de controle do siteSMS_SCI_Component Classe WMI do Servidor
Classe WMI do servidor SMS_SystemResourceList