Configuration Manager Windows 드라이버용 드라이버 패키지를 만드는 방법
Configuration Manager SMS_DriverPackage Server WMI 클래스 개체를 만들어 운영 체제 배포 드라이버에 대한 패키지를 만듭니다. 패키지에 드라이버를 추가하려면 클래스 SMS_DriverPackage AddDriverContent 메서드를 호출합니다.
드라이버 패키지는 드라이버와 연결된 콘텐츠를 저장하는 데 사용됩니다. 드라이버 패키지를 만들 때 원본 위치는 처음에 SMS 공급자가 읽고 쓰는 액세스 권한이 있는 빈 공유여야 합니다. 를 사용하여 AddDriverContent
드라이버 패키지에 드라이버를 추가하면 SMS 공급자는 드라이버 원본 위치의 콘텐츠를 드라이버 패키지 공유의 하위 디렉터리로 복사합니다.
드라이버 패키지에 드라이버와 연결된 콘텐츠를 추가하고 클라이언트에서 사용하려면 배포 지점에 할당해야 합니다. 속성이 드라이버 식별자와 일치하는 SMS_CIToContent Server WMI 클래스 개체 CI_ID
에서 드라이버 콘텐츠를 가져옵니다.
참고
여러 드라이버가 동일한 콘텐츠를 공유할 수 있습니다. 이는 일반적으로 동일한 디렉터리에 여러 .inf 파일이 있는 경우에 발생합니다.
AddDriverContent
는 여러 드라이버를 패키지에 동시에 추가하는 데 사용할 수 있습니다. 이렇게 하려면 여러 콘텐츠 ID를 추가합니다.
bRefreshDPs
다른 호출이 이루어지는 경우 매개 변수를 로 false
설정해야 합니다. 이렇게 하면 패키지가 배포 지점에서 한 번만 업데이트됩니다.
를 호출 AddDriverContent
할 때 패키지 원본 위치 집합을 지정합니다. 일반적으로 이 속성은 SMS_Driver Server WMI 클래스 개체 ContentSourcePath
속성이지만 공급자가 원래 원본 위치에 액세스할 수 없는 경우 재정의할 수 있습니다.
드라이버 패키지를 만들고 드라이버 콘텐츠를 추가하려면
SMS 공급자에 대한 연결을 설정합니다. 자세한 내용은 SMS 공급자 기본 사항을 참조하세요.
SMS_DriverPackage 개체를 만듭니다.
개체
2
의PkgSourceFlag
SMS_DriverPackage
속성을 (Storage Direct)로 설정합니다.개체를
SMS_DriverPackage
커밋합니다.개체를
SMS_DriverPackage
가져옵니다.패키지에 추가하려는 드라이버 목록을 매개 변수의 AddDriverContent 메서드
ContentIDs
에 넣습니다.메서드
ContentSourcePath
의 드라이버 콘텐츠 원본 경로 목록을 매개 변수에AddDriverContent
넣습니다.메서드를 호출합니다
AddDriverContent
.클래스 SMS_DriverPackage RefreshPkgSource 메서드를 호출하여 작업을 완료합니다.
배포 지점에 드라이버 패키지를 할당합니다. 자세한 내용은 배포 지점에 패키지를 할당하는 방법을 참조하세요.
예시
다음 예제 메서드는 SMS_Driver Server WMI 클래스 개체의 속성으로 CI_ID
표현되는 제공된 드라이버 식별자에 대한 패키지를 만듭니다. 또한 메서드는 새 패키지 이름, 설명 및 패키지 원본 경로를 매개 변수로 사용합니다.
참고
매개 변수는 packageSourcePath
UNC(범용 명명 규칙) 네트워크 경로(예: \\localhost\Drivers\ATIVideo\)로 제공해야 합니다.
샘플 코드 호출에 대한 자세한 내용은 코드 조각 Configuration Manager 호출을 참조하세요.
Sub CreateDriverPackage(connection, driverId, newPackageName, newPackageDescription, newPackageSourcePath)
Dim newPackage
Dim driver
Dim packageSources
Dim refreshDPs
Dim content
Dim path
Dim contentIds
Dim index
Dim item
' Create the new driver package object.
Set newPackage = connection.Get("SMS_DriverPackage").SpawnInstance_
' Populate the new package properties.
newPackage.Name = newPackageName
newPackage.Description = newPackageDescription
newPackage.PkgSourceFlag = 2 ' Storage direct
newPackage.PkgSourcePath = newPackageSourcePath
' Save the package.
path=newPackage.Put_
' Get the newly created package (Do this to call AddDriverContent).
Set newPackage=connection.Get(path)
' Get the driver
Set driver = connection.Get("SMS_Driver.CI_ID=" & driverId )
' Get the driver content.
Set content = connection.ExecQuery("Select * from SMS_CIToContent where CI_ID=" & driverId)
If content.Count = 0 Then
Wscript.Echo "No content found"
Exit Sub
End If
' Create Array to hold driver content identifiers.
contentIds = Array()
ReDim contentIds(content.Count-1)
index = 0
For Each item In content
contentIds(index) = item.ContentID
index = index+1
Next
' Create sources path Array.
packageSources = Array(driver.ContentSourcePath)
refreshDPs = False
' Add the driver content.
Call newPackage.AddDriverContent(contentIds,packageSources,refreshDPs)
wscript.echo "Done"
End Sub
public void CreateDriverPackage(
WqlConnectionManager connection,
int driverId,
string newPackageName,
string newPackageDescription,
string newPackageSourcePath)
{
try
{
if (Directory.Exists(newPackageSourcePath) == false)
{
throw new DirectoryNotFoundException("Package source path does not exist");
}
// Create new package object.
IResultObject newPackage = connection.CreateInstance("SMS_DriverPackage");
IResultObject driver = connection.GetInstance("SMS_Driver.CI_ID=" + driverId);
newPackage["Name"].StringValue = newPackageName;
newPackage["Description"].StringValue = newPackageDescription;
newPackage["PkgSourceFlag"].IntegerValue = (int)PackageSourceFlag.StorageDirect;
newPackage["PkgSourcePath"].StringValue = newPackageSourcePath;
// Save new package and new package properties.
newPackage.Put();
newPackage.Get();
// Get the content identifier.
List<int> contentIDs = new List<int>();
IResultObject content = connection.QueryProcessor.ExecuteQuery("Select * from SMS_CIToContent where CI_ID=" + driverId);
foreach (IResultObject ro in content)
{
contentIDs.Add(ro["ContentID"].IntegerValue);
}
// Get the package source.
List<string> packageSources = new List<string>();
packageSources.Add(driver["ContentSourcePath"].StringValue);
Dictionary<string, Object> inParams = new Dictionary<string, object>();
inParams.Add("bRefreshDPs", true);
inParams.Add("ContentIDs", contentIDs.ToArray());
inParams.Add("ContentSourcePath", packageSources.ToArray());
newPackage.ExecuteMethod("AddDriverContent", inParams);
}
catch (SmsException ex)
{
Console.WriteLine("Failed to create package. Error: " + ex.Message);
throw;
}
}
예제 메서드에는 다음 매개 변수가 있습니다.
매개 변수 | 형식 | 설명 |
---|---|---|
connection |
-관리: WqlConnectionManager - VBScript: SWbemServices |
SMS 공급자에 대한 유효한 연결입니다. |
driverId |
-관리: Integer -Vbscript: Integer |
드라이버 식별자(SMS_Driver.CI_ID )입니다. |
newPackageName |
-관리: String -Vbscript: String |
패키지의 이름입니다. |
newPackageDescription |
-관리: String -Vbscript: String |
새 패키지에 대한 설명입니다. |
newPackageSourcePath |
-관리: String -Vbscript: String |
드라이버에 대한 유효한 UNC 네트워크 경로입니다. |
코드 컴파일
이 C# 예제에는 다음이 필요합니다.
네임 스페이스
시스템
System.Collections.Generic
System.Text
System.io
Microsoft. ConfigurationManagement.ManagementProvider
Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine
어셈블리
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
강력한 프로그래밍
오류 처리에 대한 자세한 내용은 Configuration Manager 오류 정보를 참조하세요.
.NET Framework 보안
Configuration Manager 애플리케이션 보안에 대한 자세한 내용은 역할 기반 관리 Configuration Manager 참조하세요.
참고 항목
SMS_Driver 서버 WMI 클래스
클래스 SMS_DriverPackage AddDriverContent 메서드