다음을 통해 공유


기본 Windows PowerShell 제공자 생성

이 주제는 Windows PowerShell 제공자를 만드는 방법을 배우는 출발점입니다. 여기서 설명하는 기본 제공자는 제공자를 시작하고 중지하는 메서드를 제공하며, 이 제공자는 데이터 저장소에 접근하거나 데이터 저장소 내 데이터를 얻거나 설정할 수 있는 수단을 제공하지는 않지만 모든 제공자가 요구하는 기본 기능을 제공합니다.

앞서 언급했듯이, 여기서 설명된 기본 제공자는 공급자를 시작하고 종료하는 방법을 구현합니다. Windows PowerShell 런타임은 이 메서드들을 호출하여 제공자를 초기화하고 초기화합니다.

비고

이 제공자의 샘플은 Windows PowerShell에서 제공하는 AccessDBSampleProvider01.cs 파일에서 확인할 수 있습니다.

Windows PowerShell Provider 클래스 정의

Windows PowerShell 제공자를 만드는 첫 단계는 .NET 클래스를 정의하는 것입니다. 이 기본 제공자는 System.Management.Automation.Provider.CmdletProvider 기본 클래스에서 파생된 클래스 AccessDBProvider 를 정의합니다.

제공자 클래스를 API 네임스페이스의 네임스페이스(예: xxx.PowerShell.Providers)에 Providers 배치하는 것이 권장됩니다. 이 제공자는 모든 Windows PowerShell 제공자 샘플이 실행되는 네임스페이스를 사용합니다 Microsoft.Samples.PowerShell.Provider .

비고

Windows PowerShell 제공자의 클래스는 명시적으로 공개로 표시되어야 합니다. 공개로 표시되지 않은 클래스는 기본적으로 내부 저장소로 전환되며 Windows PowerShell 런타임에서 찾지 못합니다.

다음은 이 기본 제공자에 대한 클래스 정의입니다:

[CmdletProvider("AccessDB", ProviderCapabilities.None)]
public class AccessDBProvider : CmdletProvider

클래스 정의 직전에 System.Management.Automation.Provider.CmdletProviderAttribute 속성을 선언하고, 문법은 [CmdletProvider()]입니다.

필요하다면 클래스를 추가로 선언할 수 있도록 속성 키워드를 설정할 수도 있습니다. 여기서 선언된 System.Management.Automation.Provider.CmdletProviderAttribute 속성에는 두 가지 매개변수가 포함되어 있음을 주목하세요. 첫 번째 속성 매개변수는 제공자의 기본 친화성 이름을 지정하며, 사용자가 나중에 이를 수정할 수 있습니다. 두 번째 매개변수는 명령 처리 중 제공자가 Windows PowerShell 런타임에 노출하는 Windows PowerShell 정의 기능을 지정합니다. 제공자 능력에 대한 가능한 값은 System.Management.Automation.Provider.ProviderCapabilities 열거에 의해 정의됩니다. 기본 제공자라서 기능을 지원하지 않습니다.

비고

Windows PowerShell 제공자의 완전 제한 명칭에는 제공자 등록 시 Windows PowerShell이 결정한 어셈블리 이름과 기타 속성이 포함됩니다.

Provider-Specific 주 정보 정의

System.Management.Automation.Provider.CmdletProvider 기본 클래스와 모든 파생 클래스는 Windows PowerShell 런타임이 필요할 때만 제공자 인스턴스를 생성하기 때문에 상태 없는 것으로 간주됩니다. 따라서 공급자가 공급자별 데이터에 대해 완전한 제어와 상태 유지보수를 요구한다면, System.Management.Automation.ProviderInfo 클래스에서 클래스를 파생해야 합니다. 파생 클래스는 상태 유지 관리에 필요한 멤버를 정의해야 하며, Windows PowerShell 런타임이 System.Management.Automation.Provider.CmdletProvider.Start* 메서드를 호출해 프로바이더를 초기화할 때 해당 데이터에 접근할 수 있습니다.

Windows PowerShell 제공자는 연결 기반 상태를 유지할 수도 있습니다. 연결 상태 유지에 관한 자세한 내용은 'PowerShell Drive Provider'를 참조하세요.

제공자 초기화

제공자를 초기화하기 위해 Windows PowerShell 런타임은 Windows가 시작될 때 System.Management.Automation.Provider.CmdletProvider.Start* 메서드를 호출합니다. 대부분의 경우, 제공자는 이 메서드의 기본 구현을 사용할 수 있는데, 이 구현은 공급자를 설명하는 System.Management.Automation.ProviderInfo 객체를 반환합니다. 하지만 추가 초기화 정보를 추가하고 싶다면, System.Management.Automation.Provider.CmdletProvider.Start* 메서드를 구현하여 수정된 System.Management.Automation.ProviderInfo 객체를 반환하여 프로바이더에 전달하는 것이 좋습니다. 일반적으로 이 메서드는 전달된 System.Management.Automation.ProviderInfo 객체나 다른 초기화 정보를 포함하는 수정된 System.Management.Automation.ProviderInfo 객체를 반환해야 합니다.

이 기본 제공자는 이 방식을 무효화하지 않습니다. 하지만 다음 코드는 이 메서드의 기본 구현을 보여줍니다:

제공자는 '제공자별 데이터 상태 정의(Definitioning Provider-specific Data State)'에 설명된 제공자 특화 정보 상태를 유지할 수 있습니다. 이 경우, 구현은 System.Management.Automation.Provider.CmdletProvider.Start* 메서드를 덮어써서 파생 클래스의 인스턴스를 반환해야 합니다.

동적 매개변수 시작

System.Management.Automation.Provider.CmdletProvider.Start* 메서드의 제공자 구현이 추가 매개변수를 요구할 수 있습니다. 이 경우 제공자는 System.Management.Automation.Provider.CmdletProvider.StartDynamicParameters* 메서드를 덮어쓰고, cmdlet 클래스나 System.Management.Automation.RuntimeDefinedParameterDictionary 객체와 유사한 파싱 속성을 가진 속성과 필드를 반환해야 합니다.

이 기본 제공자는 이 방식을 무효화하지 않습니다. 하지만 다음 코드는 이 메서드의 기본 구현을 보여줍니다:

제공자 초기화 해제

Windows PowerShell 제공자가 사용하는 리소스를 해제하려면, 제공자가 자체 System.Management.Automation.Provider.CmdletProvider.Stop* 메서드를 구현해야 합니다. 이 메서드는 Windows PowerShell 런타임에서 세션 종료 시 제공자를 초기화 해제하기 위해 호출됩니다.

이 기본 제공자는 이 방식을 무효화하지 않습니다. 하지만 다음 코드는 이 메서드의 기본 구현을 보여줍니다:

코드 샘플

전체 샘플 코드는 AccessDbProviderSample01 코드 샘플을 참조하세요.

Windows PowerShell 제공자 테스트

Windows PowerShell 제공자가 Windows PowerShell에 등록되면, 명령줄에서 지원되는 cmdlet을 실행해 테스트할 수 있습니다. 이 기본 제공자를 위해 새 셸을 실행하고 cmdlet을 Get-PSProvider 사용해 제공자 목록을 가져오고 AccessDb 제공자가 존재하는지 확인하세요.

Get-PSProvider

다음과 같은 출력이 표시됩니다.

Name                 Capabilities                  Drives
----                 ------------                  ------
AccessDb             None                          {}
Alias                ShouldProcess                 {Alias}
Environment          ShouldProcess                 {Env}
FileSystem           Filter, ShouldProcess         {C, Z}
Function             ShouldProcess                 {function}
Registry             ShouldProcess                 {HKLM, HKCU}

또한 참조하십시오

Windows PowerShell 제공자 생성

Windows PowerShell 제공자 설계