다음을 통해 공유


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 속성이지만 공급자가 원래 원본 위치에 액세스할 수 없는 경우 재정의할 수 있습니다.

드라이버 패키지를 만들고 드라이버 콘텐츠를 추가하려면

  1. SMS 공급자에 대한 연결을 설정합니다. 자세한 내용은 SMS 공급자 기본 사항을 참조하세요.

  2. SMS_DriverPackage 개체를 만듭니다.

  3. 개체 2PkgSourceFlagSMS_DriverPackage 속성을 (Storage Direct)로 설정합니다.

  4. 개체를 SMS_DriverPackage 커밋합니다.

  5. 개체를 SMS_DriverPackage 가져옵니다.

  6. 패키지에 추가하려는 드라이버 목록을 매개 변수의 AddDriverContent 메서드 ContentIDs 에 넣습니다.

  7. 메서드 ContentSourcePath 의 드라이버 콘텐츠 원본 경로 목록을 매개 변수에 AddDriverContent 넣습니다.

  8. 메서드를 호출합니다 AddDriverContent .

  9. 클래스 SMS_DriverPackage RefreshPkgSource 메서드를 호출하여 작업을 완료합니다.

  10. 배포 지점에 드라이버 패키지를 할당합니다. 자세한 내용은 배포 지점에 패키지를 할당하는 방법을 참조하세요.

예시

다음 예제 메서드는 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 메서드