배포 지점에 패키지를 할당하는 방법
다음 예제에서는 Configuration Manager 및 SMS_SystemResourceList
클래스를 사용하여 SMS_DistributionPoint
패키지에 배포 지점을 할당하는 방법을 보여 줍니다. 패키지에 원본 파일(PkgSourcePath)이 포함된 경우에만 패키지에 배포 지점을 할당해야 합니다. 프로그램 원본 파일이 배포 지점 공유로 전파될 때까지 패키지가 보급되지 않습니다. 기본 배포 지점 공유를 사용하거나 사용할 공유를 지정할 수 있습니다. 패키지 원본 파일을 배포하는 데 사용할 배포 지점을 둘 이상 지정할 수도 있지만 이 예제에서는 이를 보여주지 않습니다.
배포 지점에 패키지를 할당하려면
SMS 공급자에 대한 연결을 설정합니다.
새 배포 지점 개체를 만듭니다(실제 배포 지점이 아님).
기존 패키지를 새 배포 지점 개체와 연결합니다.
제공된 사이트 코드 및 서버 이름을 기반으로 단일 배포 지점을 쿼리합니다.
쿼리 결과를 사용하여 배포 지점 개체의
ServerNALPath
속성을 채웁 수 있습니다.배포 지점 개체 및 속성을 저장합니다.
예시
다음 예제 메서드는 배포 지점에 패키지를 할당합니다.
샘플 코드 호출에 대한 자세한 내용은 코드 조각 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;
}
}
예제 메서드에는 다음 매개 변수가 있습니다.
매개 변수 | 형식 | 설명 |
---|---|---|
connection swbemServices |
-관리: WqlConnectionManager - VBScript: SWbemServices |
SMS 공급자에 대한 유효한 연결입니다. |
existingPackageID |
-관리: String -Vbscript: String |
기존 패키지의 ID입니다. |
siteCode |
-관리: String -Vbscript: String |
사이트 코드입니다. |
serverName |
-관리: String -Vbscript: String |
서버의 이름입니다. |
코드 컴파일
C# 예제에는 다음이 필요합니다.
네임 스페이스
시스템
Microsoft. ConfigurationManagement.ManagementProvider
Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine
어셈블리
adminui.wqlqueryengine
microsoft.configurationmanagement.managementprovider
Mscorlib
강력한 프로그래밍
오류 처리에 대한 자세한 내용은 Configuration Manager 오류 정보를 참조하세요.
참고 항목
소프트웨어 배포 개요서버 WMI 클래스에 SMS_SCI_Component사이트 제어 파일 정보
SMS_SystemResourceList 서버 WMI 클래스