다음을 통해 공유


명령 기반 DSC 리소스 분석

DSC 리소스는 시스템 설정을 관리하기 위한 표준화된 인터페이스를 제공합니다. 리소스는 관리할 수 있는 속성을 정의하고 리소스의 instance 가져오는 데 필요한 코드를 구현합니다.

명령 기반 DSC 리소스는 다음 두 개 이상의 파일로 정의됩니다.

  1. 리소스와 상호 작용하는 방법을 DSC에 알려주는 DSC 리소스 매니페스트입니다.
  2. 하나 이상의 실행 파일 및 리소스의 인스턴스를 관리하는 해당 종속성입니다.

DSC 리소스 매니페스트

DSC 리소스 매니페스트는 JSON 파일로 정의됩니다. DSC가 JSON 파일을 매니페스트로 인식하려면 파일이 다음 조건을 충족해야 합니다.

  1. 파일은 환경 변수에서 PATH 검색할 수 있어야 합니다.
  2. 파일 이름은 로 끝나 .dsc.resource.json야 합니다.

DSC는 로컬 시스템에서 사용 가능한 명령 기반 DSC 리소스를 검색할 때 의 모든 폴더에서 PATH DSC 리소스 매니페스트 명명 규칙을 사용하는 파일을 검색합니다. 그런 다음 DSC는 검색된 각 파일을 구문 분석하고 DSC 리소스 매니페스트 JSON 스키마에 대해 유효성을 검사합니다.

JSON 파일이 스키마에 대해 유효성을 검사하는 경우 DSC는 DSC 리소스를 사용할 수 있습니다.

최소한 매니페스트는 다음을 정의해야 합니다.

  • 호환되는 DSC 리소스 매니페스트 JSON 스키마의 버전입니다.
  • 리소스의 정규화된 이름(예: Microsoft.Windows/Registry)입니다. 정규화된 이름 구문은 입니다 <owner>[.<group>][.<area>]/<name>. 정규화된 이름의 그룹 및 영역 구성 요소를 사용하면 리소스를 네임스페이스로 구성할 수 있습니다.
  • DSC가 명령을 호출하여 리소스 instance 현재 상태를 가져오는 방법입니다.
  • instance 유효성을 검사하는 방법입니다. 다음 중 하나일 수 있습니다.
    • instance 설명하는 JSON 스키마
    • 명령 DSC는 런타임에 스키마를 가져오기 위해 를 호출해야 합니다.
    • 중첩된 DSC 리소스의 유효성을 검사하는 명령입니다. 이 마지막 옵션은 DSC 그룹 리소스 및 DSC 공급자 리소스에만 적용됩니다.

매니페스트는 필요에 따라 다음을 정의할 수 있습니다.

  • DSC가 명령을 호출하여 instance 원하는 상태인지 여부를 테스트하는 방법입니다.
  • DSC가 명령을 호출하여 instance 원하는 상태로 설정하는 방법입니다.
  • 명령에서 반환된 0이 아닌 종료 코드의 의미입니다.
  • 리소스가 DSC 그룹 리소스 또는 DSC 공급자 리소스인 경우 DSC가 명령을 호출하여 다른 DSC 리소스를 관리하는 방법입니다.
  • 리소스에 대한 메타데이터(예: 작성자 및 간단한 설명).

매니페스트가 리소스의 instance 테스트하는 방법을 정의하지 않으면 DSC는 리소스 인스턴스에 대한 가상 테스트를 수행합니다. DSC의 가상 테스트는 항상 instance 실제 상태를 가져오고 instance 속성을 원하는 상태로 엄격하게 대/소문자를 구분합니다. 가상 테스트는 밑줄() 또는 달러 기호$(_)가 접두사로 지정된 속성을 무시합니다. 속성이 정의된 원하는 상태와 정확히 동일하지 않으면 DSC는 instance 비준수로 보고합니다.

매니페스트가 DSC 리소스의 instance 설정하는 방법을 정의하지 않는 경우 DSC는 리소스를 사용하여 원하는 상태를 적용할 수 없습니다.

매니페스트는 모든 작업에 대해 동일한 실행 파일을 지정할 필요가 없습니다. 각 작업에 대한 정의는 독립적입니다.

DSC 리소스 실행 파일

명령 기반 DSC 리소스는 항상 DSC를 실행하기 위한 실행 파일이 필요합니다. DSC 리소스 매니페스트를 실행 파일과 함께 번들로 묶을 필요가 없습니다. 실행 파일은 이진 애플리케이션 또는 셸 스크립트와 같은 모든 실행 파일일 수 있습니다. 리소스는 다른 작업에 다른 실행 파일을 사용할 수 있습니다.

DSC에서 실행 파일을 사용하려면 환경 변수에서 PATH 검색할 수 있어야 합니다. DSC는 실행 파일에서 반환된 종료 코드를 사용하여 명령이 성공했는지 확인하기 위해 작업당 한 번 실행 파일을 호출합니다. DSC는 종료 코드를 0 성공으로 처리하고 다른 모든 종료 코드를 오류로 처리합니다.

입력

DSC는 명령 기반 DSC 리소스에 stdin을 통해 JSON 데이터 Blob 또는 인수 플래그 및 값 집합으로 입력을 보냅니다. 입력 처리는 DSC 리소스 매니페스트에서 작업별로 정의됩니다.

DSC가 stdin을 통해 JSON으로 입력을 보내는 경우 데이터 Blob은 instance 원하는 상태의 JSON 표현입니다. 리소스가 중첩된 개체를 사용하여 복잡한 속성을 지원할 수 있으므로 리소스에 대한 가장 강력한 옵션입니다.

DSC는 입력을 인수로 보내면 지정된 각 속성에 대한 인수 쌍을 생성합니다. 첫 번째 인수는 와 같이 --duration접두사로 --접두사로 지정된 속성의 이름입니다. 두 번째 인수는 속성의 값입니다. 인수 쌍의 순서는 보장되지 않습니다. 이 입력 메서드는 복잡한 속성을 지원하지 않습니다.

출력

명령 기반 DSC 리소스에 대한 실행 파일은 DSC에서 호출할 때 JSON 데이터를 stdout으로 반환해야 합니다. 출력 인코딩은 UTF-8이어야 합니다. 리소스가 instance 상태를 반환하면 DSC는 리소스의 instance 스키마에 대해 JSON 데이터의 유효성을 검사합니다.

DSC 공급자 리소스의 경우 DSC는 실행 파일이 단일 JSON 배열 또는 일련의 JSON 선으로 관리하는 리소스에 대한 instance 상태를 통과해야 합니다.

명령 기반 DSC 리소스는 JSON 선을 stderr로 내보내서 DSC에 로깅 정보를 보고할 수 있습니다. 각 로그 항목은 다음 두 개의 키를 포함하는 JSON 개체여야 합니다.

  1. 키는 message 로그 항목에 대해 사람이 읽을 수 있는 문자열을 정의합니다.
  2. 키는 level 메시지가 , 또는 InformationErrorWarning나타내는지 여부를 정의합니다.

DSC는 리소스에서 메시지를 수집하고 구성 작업에 대한 결과에 표시합니다. DSC는 구성 외부에서 직접 리소스를 호출하는 경우 메시지를 수집하지 않습니다. 대신, 그들은 단지 stderr로 내보냅니다.