이 섹션에서는 좋은 개발 및 사용자 환경을 보장하기 위해 고려해야 하는 지침을 설명합니다. 때때로 그들은 적용 할 수 있습니다, 때로는 그들은하지 않을 수 있습니다.
디자인 지침
cmdlet을 디자인할 때는 다음 지침을 고려해야 합니다. 상황에 적용되는 디자인 지침을 찾으면 코드 지침에서 유사한 지침을 확인해야 합니다.
InputObject 매개 변수 지원(AD01)
Windows PowerShell은 Microsoft .NET Framework 개체에서 직접 작동하므로 사용자가 특정 작업을 수행하는 데 필요한 형식과 정확히 일치하는 .NET Framework 개체를 사용할 수 있는 경우가 많습니다.
InputObject
는 이러한 개체를 입력으로 사용하는 매개 변수의 표준 이름입니다.
예를 들어 Stop-Proc
의 샘플 cmdlet은 파이프라인의 입력을 지원하는 Process 형식의 매개 변수를 정의 InputObject
합니다. 사용자는 프로세스 개체 집합을 가져오고, 이를 조작하여 중지할 정확한 개체를 선택한 다음, cmdlet에 Stop-Proc
직접 전달할 수 있습니다.
Force 매개 변수 지원(AD02)
경우에 따라 cmdlet은 사용자가 요청된 작업을 수행하지 못하도록 보호해야 합니다. 이러한 cmdlet은 사용자가 작업을 수행할 수 있는 권한이 있는 경우 사용자가 해당 보호를 재정의할 수 있도록 Force 매개 변수를 지원해야 합니다.
예를 들어 Remove-Item cmdlet은 일반적으로 읽기 전용 파일을 제거하지 않습니다. 그러나 이 cmdlet은 Force 매개 변수를 지원하므로 사용자가 읽기 전용 파일을 강제로 제거할 수 있습니다. 사용자에게 읽기 전용 특성을 수정할 수 있는 권한이 이미 있고 사용자가 파일을 제거하는 경우 Force 매개 변수를 사용하면 작업이 간소화됩니다. 그러나 사용자에게 파일을 제거할 수 있는 권한이 없는 경우 Force 매개 변수는 아무런 영향을 주지 않습니다.
Windows PowerShell을 통해 자격 증명 처리(AD03)
cmdlet은 자격 증명을 Credential
나타내는 매개 변수를 정의해야 합니다. 이 매개 변수는 System.Management.Automation.PSCredential 형식이어야 하며 자격 증명 특성 선언을 사용하여 정의해야 합니다. 이 지원은 사용자에게 사용자 이름, 암호 또는 전체 자격 증명이 직접 제공되지 않은 경우 둘 다에 대한 메시지를 자동으로 표시합니다. 자격 증명 특성에 대한 자세한 내용은 자격 증명 특성 선언을 참조하세요.
인코딩 매개 변수 지원(AD04)
cmdlet이 파일 시스템의 파일에 쓰거나 파일에서 읽는 것과 같이 이진 폼에서 텍스트를 읽거나 쓰는 경우 cmdlet에는 텍스트가 이진 형식으로 인코딩되는 방법을 지정하는 인코딩 매개 변수가 있어야 합니다.
테스트 Cmdlet은 부울(AD05)을 반환해야 합니다.
리소스에 대해 테스트를 수행하는 Cmdlet은 조건식에서 사용할 수 있도록 System.Boolean 형식을 파이프라인에 반환해야 합니다.
코드 지침
cmdlet 코드를 작성할 때는 다음 지침을 고려해야 합니다. 상황에 적용되는 지침을 찾으면 디자인 지침에서 유사한 지침을 확인해야 합니다.
Cmdlet 클래스 명명 규칙 따르기(AC01)
표준 명명 규칙을 따르면 cmdlet을 더 쉽게 검색할 수 있으며 사용자가 cmdlet이 수행하는 작업을 정확하게 이해할 수 있습니다. 이 방법은 cmdlet이 공용 형식이므로 Windows PowerShell을 사용하는 다른 개발자에게 특히 중요합니다.
올바른 네임스페이스에서 Cmdlet 정의
일반적으로 .NET Framework 네임스페이스에서 cmdlet이 실행되는 제품을 나타내는 네임스페이스에 추가하는 .Commands
cmdlet에 대한 클래스를 정의합니다. 예를 들어 Windows PowerShell에 포함된 cmdlet은 네임스페이 Microsoft.PowerShell.Commands
스에 정의됩니다.
Cmdlet 이름과 일치하도록 Cmdlet 클래스의 이름을 지정합니다.
cmdlet을 구현하는 .NET Framework 클래스의 이름을 지정하면 클래스 <Verb><Noun>Command
이름을 지정합니다. 여기서 개체 틀과 <Verb>
자리 표시자를 cmdlet 이름에 사용되는 동사와 명사로 바꿉 <Noun>
니다. 예를 들어 Get-Process cmdlet은 라는 GetProcessCommand
클래스에 의해 구현됩니다.
파이프라인 입력이 없는 경우 BeginProcessing 메서드(AC02)를 재정의합니다.
cmdlet이 파이프라인의 입력을 허용하지 않는 경우 System.Management.Automation.Cmdlet.BeginProcessing 메서드에서 처리를 구현해야 합니다. 이 메서드를 사용하면 Windows PowerShell에서 cmdlet 간의 순서를 유지할 수 있습니다. 파이프라인의 첫 번째 cmdlet은 파이프라인의 나머지 cmdlet이 처리를 시작하기 전에 항상 해당 개체를 반환합니다.
중지 요청을 처리하려면 StopProcessing 메서드 재정의(AC03)
cmdlet이 중지 신호를 처리할 수 있도록 System.Management.Automation.Cmdlet.StopProcessing 메서드를 재정의합니다. 일부 cmdlet은 작업을 완료하는 데 시간이 오래 걸리며, cmdlet이 장기 실행 RPC 호출에서 스레드를 차단하는 경우와 같이 Windows PowerShell 런타임 호출 간에 긴 시간을 전달할 수 있습니다. 여기에는 System.Management.Automation.Cmdlet.WriteObject 메서드, System.Management.Automation.Cmdlet.WriteError 메서드 및 완료하는 데 시간이 오래 걸릴 수 있는 다른 피드백 메커니즘을 호출하는 cmdlet이 포함됩니다. 이러한 경우 사용자는 이러한 cmdlet에 중지 신호를 보내야 할 수 있습니다.
IDisposable 인터페이스 구현(AC04)
System.Management.Automation.Cmdlet.ProcessRecord 메서드에 의해 삭제되지 않은(파이프라인에 기록) 개체가 cmdlet에 있는 경우 cmdlet에 추가 개체 삭제가 필요할 수 있습니다. 예를 들어 cmdlet이 System.Management.Automation.Cmdlet.BeginProcessing 메서드에서 파일 핸들을 열고 System.Management.Automation.Cmdlet.ProcessRecord 메서드에서 사용할 핸들을 열어 두는 경우 처리가 끝나면 이 핸들을 닫아야 합니다.
Windows PowerShell 런타임이 항상 System.Management.Automation.Cmdlet.EndProcessing 메서드를 호출하지 는 않습니다. 예를 들어 작업 중간에 cmdlet이 취소되거나 cmdlet의 일부에서 종료 오류가 발생하는 경우 System.Management.Automation.Cmdlet.EndProcessing 메서드가 호출되지 않을 수 있습니다. 따라서 개체 정리가 필요한 cmdlet의 .NET Framework 클래스는 종료자를 포함하여 전체 System.IDisposable 인터페이스 패턴을 구현해야 하므로 Windows PowerShell 런타임은 처리가 끝날 때 System.Management.Automation.Cmdlet.EndProcessing 및 System.IDisposable.Dispose* 메서드를 모두 호출할 수 있습니다.
직렬화에 친숙한 매개 변수 형식 사용(AC05)
원격 컴퓨터에서 cmdlet 실행을 지원하려면 클라이언트 컴퓨터에서 직렬화한 다음 서버 컴퓨터에서 리하이딩할 수 있는 형식을 사용합니다. 다음 형식은 serialization에 친숙합니다.
기본 형식:
- Byte, SByte, Decimal, Single, Double, Int16, Int32, Int64, Uint16, UInt32 및 UInt64.
- 부울, Guid, 바이트[], TimeSpan, DateTime, Uri 및 버전입니다.
- Char, String, XmlDocument.
기본 제공 리하이드래트 가능 형식:
- PSPrimitiveDictionary
- 스위치매개변수 (SwitchParameter)
- PSListModifier
- PSCredential
- IPAddress, MailAddress
- CultureInfo
- X509Certificate2, X500DistinguishedName
- DirectorySecurity, FileSecurity, RegistrySecurity
기타 형식:
- 보안 문자열 (SecureString)
- 컨테이너(위 형식의 목록 및 사전)
중요한 데이터에 SecureString 사용(AC06)
중요한 데이터를 처리할 때는 항상 System.Security.SecureString 데이터 형식을 사용합니다. 여기에는 매개 변수에 대한 파이프라인 입력뿐만 아니라 중요한 데이터를 파이프라인에 반환하는 작업이 포함될 수 있습니다.
.NET은 새 개발에 SecureString을 사용하지 않는 것이 권장되지만 PowerShell은 이전 버전과의 호환성을 위해 SecureString 클래스를 계속 지원합니다. SecureString을 사용하는 것이 일반 텍스트 문자열을 사용하는 것보다 더 안전합니다. PowerShell은 콘텐츠를 콘솔 또는 로그에 실수로 노출하지 않도록 SecureString 형식을 계속 사용합니다. SecureString은 일반 텍스트 문자열로 쉽게 변환할 수 있으므로 신중하게 사용합니다. SecureString 사용에 대한 자세한 내용은 System.Security.SecureString 클래스 설명서를 참조하세요.
또한 참조하십시오
PowerShell