Cmdlet 개요
cmdlet은 PowerShell 환경에서 사용되는 간단한 명령입니다. PowerShell 런타임은 명령줄에서 제공되는 자동화 스크립트의 컨텍스트 내에서 이러한 cmdlet을 호출합니다. 또한 PowerShell 런타임은 PowerShell API를 통해 프로그래밍 방식으로 호출합니다.
Cmdlets (커맨드렛)
Cmdlet은 작업을 수행하고 일반적으로 Microsoft .NET 개체를 파이프라인의 다음 명령으로 반환합니다. cmdlet은 PowerShell의 파이프라인 의미 체계에 참여하는 단일 명령입니다. 여기에는 이진(C#) cmdlet, 고급 스크립트 함수, CDXML 및 워크플로가 포함됩니다.
이 SDK 설명서에서는 C#으로 작성된 이진 cmdlet을 만드는 방법을 설명합니다. 스크립트 기반 cmdlet에 대한 자세한 내용은 다음을 참조하세요.
- 고급 함수에 관하여
- about_Functions_CmdletBindingAttribute - 이는 특정 프로그래밍 컨텍스트에서 사용되는 코드 참조 또는 명령 이름입니다. 프로그램 문서 또는 시스템 내에서 원문 그대로 사용되는 것이 적절할 수 있습니다.
- about_Functions_Advanced_Methods
이진 cmdlet을 만들려면 특수화된 두 cmdlet 기본 클래스 중 하나에서 파생되는 cmdlet 클래스를 구현해야 합니다. 파생 클래스는 다음을 수행해야 합니다.
- 파생 클래스를 cmdlet으로 식별하는 특성을 선언합니다.
- public 속성을 cmdlet 매개 변수로 식별하는 특성으로 데코레이팅되는 공용 속성을 정의합니다.
- 하나 이상의 입력 처리 메서드를 재정의하여 레코드를 처리합니다.
Import-Module cmdlet을 사용하여 클래스가 포함된 어셈블리를 직접 로드하거나 System.Management.Automation.Runspaces.InitialSessionState API를 사용하여 어셈블리를 로드하는 호스트 애플리케이션을 만들 수 있습니다. 두 방법 모두 cmdlet의 기능에 대한 프로그래밍 방식 및 명령줄 액세스를 제공합니다.
Cmdlet 용어
다음 용어는 PowerShell cmdlet 설명서에서 자주 사용됩니다.
Cmdlet 특성
cmdlet 클래스를 cmdlet으로 선언하는 데 사용되는 .NET 특성입니다. PowerShell은 선택 사항인 다른 여러 특성을 사용하지만 Cmdlet 특성이 필요합니다. 이 특성에 대한 자세한 내용은 Cmdlet 특성 선언참조하세요.
Cmdlet 매개 변수
사용자 또는 cmdlet을 실행하는 애플리케이션에서 사용할 수 있는 매개 변수를 정의하는 공용 속성입니다. cmdlet에는 필수, 명명된 위치 및 스위치 매개 변수가 있을 수 있습니다. 스위치 매개 변수를 사용하면 호출에 매개 변수가 지정된 경우에만 평가되는 매개 변수를 정의할 수 있습니다. 다양한 유형의 매개 변수에 대한 자세한 내용은 Cmdlet 매개 변수참조하세요.
매개 변수 집합
동일한 명령에서 특정 작업을 수행하는 데 사용할 수 있는 매개 변수 그룹입니다. cmdlet에는 여러 매개 변수 집합이 있을 수 있지만 각 매개 변수 집합에는 고유한 매개 변수가 하나 이상 있어야 합니다. 좋은 cmdlet 디자인은 고유 매개 변수도 필수 매개 변수임을 강력하게 시사합니다. 매개 변수 집합에 대한 자세한 내용은 Cmdlet 매개 변수 집합참조하세요.
동적 매개 변수
런타임 시 cmdlet에 추가되는 매개 변수입니다. 일반적으로 다른 매개 변수가 특정 값으로 설정되면 동적 매개 변수가 cmdlet에 추가됩니다. 동적 매개 변수에 대한 자세한 내용은 Cmdlet 동적 매개 변수참조하세요.
입력 처리 방법
System.Management.Automation.Cmdlet 클래스는 레코드를 처리하는 데 사용되는 다음과 같은 가상 메서드를 제공합니다. 모든 파생 cmdlet 클래스는 처음 세 가지 메서드 중 하나 이상을 재정의해야 합니다.
- System.Management.Automation.Cmdlet.BeginProcessing: cmdlet에 대한 선택적 일회성 사전 처리 기능을 제공하는 데 사용됩니다.
- System.Management.Automation.Cmdlet.ProcessRecord: cmdlet에 대한 레코드별 처리 기능을 제공하는 데 사용됩니다. System.Management.Automation.Cmdlet.ProcessRecord 메서드는 cmdlet의 입력에 따라 여러 번 호출되거나 전혀 호출되지 않을 수 있습니다.
- System.Management.Automation.Cmdlet.EndProcessing: cmdlet에 대한 선택적 일회성 후처리 기능을 제공하는 데 사용됩니다.
- System.Management.Automation.Cmdlet.StopProcessing: 사용자가 cmdlet을 비동기적으로 중지할 때 처리를 중지하는 데 사용됩니다(예: Ctrl+C눌러).
이러한 메서드에 대한 자세한 내용은 Cmdlet 입력 처리 메서드참조하세요.
cmdlet을 구현하는 경우 이러한 입력 처리 방법 중 하나 이상을 재정의해야 합니다. 일반적으로 ProcessRecord() cmdlet이 처리하는 모든 레코드에 대해 호출되므로 재정의하는 메서드입니다. 반면에 BeginProcessing() 메서드와 EndProcessing() 메서드를 한 번 호출하여 레코드의 사전 처리 또는 후처리를 수행합니다. 이러한 메서드에 대한 자세한 내용은 입력 처리 메서드참조하세요.
ShouldProcess 기능
PowerShell을 사용하면 cmdlet이 시스템을 변경하기 전에 사용자에게 피드백을 요청하는 cmdlet을 만들 수 있습니다. 이 기능을 사용하려면 cmdlet이 cmdlet 특성을 선언할 때 ShouldProcess
기능을 지원한다고 선언해야 하며, cmdlet은 입력 처리 방법 내에서 system.Management.Automation.Cmdlet.ShouldContinue 메서드를System.Management.Automation.Cmdlet.ShouldProcess 호출해야 합니다.
ShouldProcess
기능을 지원하는 방법에 대한 자세한 내용은 요청 확인참조하세요.
트랜잭션
단일 작업으로 처리되는 명령의 논리적 그룹입니다. 그룹의 명령이 실패하면 작업이 자동으로 실패하고 사용자는 트랜잭션 내에서 수행된 작업을 수락하거나 거부할 수 있습니다. 트랜잭션에 참여하려면 cmdlet 특성이 선언될 때 cmdlet이 트랜잭션을 지원한다고 선언해야 합니다. 트랜잭션에 대한 지원은 Windows PowerShell 2.0에서 도입되었습니다. 트랜잭션에 대한 자세한 내용은 트랜잭션지원하는 방법을 참조하세요.
Cmdlet과 명령의 차이점
Cmdlet은 다음과 같은 방법으로 다른 명령 셸 환경의 명령과 다릅니다.
- Cmdlet은 .NET 클래스의 인스턴스입니다. 독립 실행형 실행 파일이 아닙니다.
- Cmdlet은 12줄의 코드에서 만들 수 있습니다.
- Cmdlet은 일반적으로 자체 구문 분석, 오류 프레젠테이션 또는 출력 서식을 수행하지 않습니다. 구문 분석, 오류 프레젠테이션 및 출력 서식은 PowerShell 런타임에서 처리됩니다.
- Cmdlet은 텍스트 스트림이 아닌 파이프라인에서 입력 개체를 처리하며, cmdlet은 일반적으로 개체를 파이프라인에 출력으로 전달합니다.
- Cmdlet은 한 번에 하나의 개체를 처리하므로 레코드 지향적입니다.
Cmdlet 기본 클래스
Windows PowerShell은 다음 두 기본 클래스에서 파생된 cmdlet을 지원합니다.
대부분의 cmdlet은 System.Management.Automation.Cmdlet 기본 클래스에서 파생되는 .NET 클래스를 기반으로 합니다. 이 클래스에서 파생하면 cmdlet이 Windows PowerShell 런타임에 대한 최소 종속성 집합을 사용할 수 있습니다. 이 두 가지 이점이 있습니다. 첫 번째 이점은 cmdlet 개체가 더 작고 PowerShell 런타임 변경의 영향을 덜 받는다는 것입니다. 두 번째 이점은 필요한 경우 cmdlet 개체의 인스턴스를 직접 만든 다음 PowerShell 런타임을 통해 호출하는 대신 직접 호출할 수 있다는 것입니다.
더 복잡한 cmdlet은 System.Management.Automation.PSCmdlet 기본 클래스에서 파생되는 .NET 클래스를 기반으로 합니다. 이 클래스에서 파생하면 PowerShell 런타임에 훨씬 더 많이 액세스할 수 있습니다. 이 액세스를 통해 cmdlet은 스크립트를 호출하고 공급자에 액세스하며 현재 세션 상태에 액세스할 수 있습니다. (현재 세션 상태에 액세스하려면 세션 변수 및 기본 설정을 가져와서 설정합니다.) 그러나 이 클래스에서 파생하면 cmdlet 개체의 크기가 증가하고 cmdlet이 PowerShell 런타임의 현재 버전과 더 긴밀하게 결합됩니다.
일반적으로 PowerShell 런타임에 대한 확장 액세스가 필요하지 않은 경우 System.Management.Automation.Cmdlet 클래스에서 파생되어야 합니다. 그러나 PowerShell 런타임에는 cmdlet을 실행하기 위한 광범위한 로깅 기능이 있습니다. 감사 모델이 이 로깅에 의존하는 경우 System.Management.Automation.PSCmdlet 클래스에서 파생하여 다른 cmdlet 내에서 cmdlet의 실행을 방지할 수 있습니다.
Cmdlet 특성
PowerShell은 cmdlet을 관리하고 PowerShell에서 제공하고 cmdlet에 필요할 수 있는 일반적인 기능을 지정하는 데 사용되는 몇 가지 .NET 특성을 정의합니다. 예를 들어 특성을 사용하여 클래스를 cmdlet으로 지정하고, cmdlet의 매개 변수를 지정하고, cmdlet 개발자가 cmdlet 코드에서 해당 기능을 구현할 필요가 없도록 입력 유효성 검사를 요청합니다. 특성에 대한 자세한 내용은 PowerShell 특성참조하세요.
Cmdlet 이름
PowerShell은 동사 및 명사 이름 쌍을 사용하여 cmdlet의 이름을 지정합니다. 예를 들어 PowerShell에 포함된 Get-Command
cmdlet은 명령 셸에 등록된 모든 cmdlet을 가져오는 데 사용됩니다. 동사는 cmdlet이 수행하는 작업을 식별하고 명사는 cmdlet이 해당 작업을 수행하는 리소스를 식별합니다.
이러한 이름은 .NET 클래스가 cmdlet으로 선언될 때 지정됩니다. .NET 클래스를 cmdlet으로 선언하는 방법에 대한 자세한 내용은 Cmdlet 특성 선언참조하세요.
Cmdlet 코드 작성
이 문서에서는 cmdlet 코드를 작성하는 방법을 검색하는 두 가지 방법을 제공합니다. 많은 설명 없이 코드를 보려면 Cmdlet 코드예제를 참조하세요. 코드에 대한 자세한 설명을 원하는 경우 GetProc 자습서, StopProc 자습서또는 SelectStr 자습서 항목을 참조하세요.
cmdlet 작성 지침에 대한 자세한 내용은 Cmdlet 개발 지침참조하세요.
또한 참조하십시오
PowerShell