Compartilhar via


Como Atribuir um Pacote a um Ponto de Distribuição

O exemplo seguinte mostra como atribuir um ponto de distribuição a um pacote com as SMS_DistributionPoint classes e SMS_SystemResourceList no Configuration Manager. Só tem de atribuir um ponto de distribuição a um pacote se o pacote contiver ficheiros de origem (PkgSourcePath). O pacote não é anunciado até que os ficheiros de origem do programa tenham sido propagados para uma partilha de ponto de distribuição. Pode utilizar a partilha de ponto de distribuição predefinida ou pode especificar uma partilha a utilizar. Também pode especificar mais do que um ponto de distribuição a utilizar para distribuir os ficheiros de origem do pacote, embora este exemplo não demonstre isso.

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

  1. Configure uma ligação ao Fornecedor 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. Consulte um único ponto de distribuição com base no código do site fornecido e no nome do servidor.

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

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

Exemplo

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

Para obter informações sobre como chamar o código de exemplo, veja Chamar Configuration Manager Fragmentos 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
- Gerido: WqlConnectionManager
- VBScript: SWbemServices
Uma ligação válida ao Fornecedor de SMS.
existingPackageID - Gerido: String
- VBScript: String
O ID do pacote existente.
siteCode - Gerido: String
- VBScript: String
O código do site.
serverName - Gerido: String
- VBScript: String
O nome do servidor.

Compilando o código

O exemplo de 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 processamento de erros, veja About Configuration Manager Errors (Acerca dos Erros de Configuration Manager).

Confira também

Descrição geral da distribuição de software Acerca do ficheiro de controlo do siteSMS_SCI_Component Classe WMI de Servidor SMS_SystemResourceList Classe WMI de Servidor