WinGet 구성 파일을 작성하는 방법

WinGet 구성 파일을 만들려면 다음을 수행합니다.

  1. WinGet 구성 파일 명명 규칙에 따라 YAML 파일을 만듭니다.
  2. WinGet 구성 파일의 형식을 숙지하고 현재 파일 스키마를 연결합니다.
  3. 파일에 포함할 어설션 목록(필수 사전 조건) 및 리소스(필요한 설치 목록 및 컴퓨터의 개발 환경을 원하는 상태로 만들기 위한 구성 설정 목록)를 결정합니다.
  4. 원하는 구성 작업을 수행하는 데 필요한 PowerShell 모듈 및 DSC(필요한 상태 구성) 리소스를 식별합니다.
  5. 각 구성 리소스에 필요한 지시문 및 설정을 결정합니다.
  6. 각 리소스에 대한 종속성을 결정합니다.

WinGet 구성 명령을 사용하는 방법에 대해 자세히 알아봅니다.

파일 형식

Windows 패키지 관리자는 매니페스트(YAML 파일)를 사용하여 Windows 사용자를 위한 패키지를 찾아 설치합니다. WinGet 구성 파일은 파일의 구조 및 유효성 검사를 정의하는 데 도움이 되는 JSON 스키마 사양을 추가하여 동일한 YAML 스타일 형식을 사용합니다. WinGet 구성 파일의 형식이 유효한지 검색하는 데 도움이 되도록 RedHat의 YAML 확장Visual Studio Code를 사용하여 적절한 구문을 지원하고, 서식 오류를 감지하고, 가리키기 지원 및 자동 완성(JSON 스키마 파일에 연결된 경우)을 제공하는 것이 좋습니다. 그리고 유효한 서식을 확인하세요.

파일 명명 규칙

WinGet 구성 파일의 이름을 지정하는 규칙은 다음과 같습니다 configuration.dsc.yaml. Git 기반 프로젝트의 경우 기본 구성은 다음의 "구성" 디렉터리에 ./configurations/configuration.dsc.yaml저장되어야 합니다.

WinGet 구성 파일의 섹션

WinGet 구성 파일은 다음 두 개의 기본 섹션으로 구분됩니다.

  1. 어설션: 구성을 실행하는 데 필요한 사전 조건입니다.
  2. 리소스: 설치할 소프트웨어 및 도구 목록, 설치에 대한 구성 설정 및 Windows 운영 체제에 대한 구성 설정입니다.

어설션 섹션

어설션 목록에는 이 WinGet 구성 파일에 나열된 리소스가 파일을 실행하는 컴퓨터에서 성공하는 데 필요한 사전 조건(또는 필수 구성 요소)이 포함됩니다. 어설션은 병렬로 완료할 수 있으며 순차적 순서가 필요하지 않습니다.

어설션 예제:

  • OS 버전: 컴퓨터에 설치된 운영 체제*의 최소 버전입니다. OS에 시간이 지남에 따라 기능이 추가됨에 따라 일부 기능은 이전 버전을 지원하도록 백포칭되고 일부는 지원되지 않습니다. 구성에 필요한 특정 도구 또는 기능이 지원될 수 있는지 여부를 확인하기 위해 최소 OS 버전을 확인하는 것이 항상 유용합니다. 예를 들어 WinGet(Windows 패키지 관리자)에는 최소 Windows 10 버전 1809 이상이 필요합니다. 이전 버전의 Windows는 WinGet을 지원하지 않습니다. *PowerShell DSC 리소스가 시스템 상태를 변경할 수 있지만 Windows 업데이트를 호출하고 오픈 소스 프로젝트에 대한 프로젝트 구성에서 OS 버전을 수정하는 것은 적절하지 않습니다.

어설션이 "false"를 반환하여 시스템이 원하는 상태가 아님을 나타내는 경우 해당 어설션을 필드를 사용하는 dependsOn 종속성으로 식별하는 모든 리소스를 건너뛰고 실행하지 못합니다. 이 경우 Windows 환경에 구성 변경 내용이 적용되지 않았더라도 이 구성은 성공적인 결과로 간주됩니다.

리소스 섹션

리소스 목록에는 설치가 필요한 모든 소프트웨어, 도구, 패키지 등과 윈도우즈 운영 체제 또는 설치된 응용 프로그램에 대한 구성 설정이 포함됩니다. 각 리소스에는 이름, 수행할 지침 설명 및 해당 지침 수행을 담당할 PowerShell 모듈과 관련 설정 또는 종속성이 지정되어야 합니다.

WinGet 구성 파일 예제

다음은 WinGet 구성 configuration.dsc.yaml 형식 파일의 예입니다.

# yaml-language-server: $schema=https://aka.ms/configuration-dsc-schema/0.2
properties:
  assertions:
    - resource: Microsoft.Windows.Developer/OsVersion
      directives:
        description: Verify min OS version requirement
        allowPrerelease: true
      settings:
        MinVersion: '10.0.22000'
  resources:
    - resource: Microsoft.Windows.Developer/DeveloperMode
      directives:
        description: Enable Developer Mode
        allowPrerelease: true
      settings:
        Ensure: Present
    - resource: Microsoft.WinGet.DSC/WinGetPackage
      id: vsPackage
      directives:
        description: Install Visual Studio 2022 Community
        allowPrerelease: true
      settings:
        id: Microsoft.VisualStudio.2022.Community
        source: winget
    - resource: Microsoft.VisualStudio.DSC/VSComponents
      dependsOn:
        - vsPackage
      directives:
        description: Install required VS workloads from vsconfig file
        allowPrerelease: true
      settings:
        productId: Microsoft.VisualStudio.Product.Community
        channelId: VisualStudio.17.Release
        vsConfigFile: '${WinGetConfigRoot}\..\.vsconfig'
        includeRecommended: true
  configurationVersion: 0.2.0

이 파일의 구성 요소는 다음으로 구성됩니다.

  1. 스키마: 구성 파일의 첫 번째 줄에는 다음 주석 # yaml-language-server: $schema=https://aka.ms/configuration-dsc-schema/<most recent schema version #> 이 포함되어야 합니다. DSC 스키마를 설정하고 그 뒤에 파일을 추가합니다. WinGet 구성 스키마 https://aka.ms/configuration-dsc-schema/의 최신 버전을 찾으려면 . 이 예제 당시의 가장 최근 스키마 번호는 0.2스키마를 다음과 # yaml-language-server: $schema=https://aka.ms/configuration-dsc-schema/0.2같이 입력한 것입니다.

  2. Properties: 구성 파일의 루트 노드는 properties 이며 구성 버전(이 예에서는configurationVersion: 0.2.0 )을 포함해야 합니다. 이 버전은 구성 파일의 업데이트에 따라 업데이트해야 합니다. 속성 노드에는 assertions 노드와 resources 노드가 포함되어 야 합니다.

  3. 어설션: 이 섹션의 이 구성에 필요한 사전 조건(또는 필수 구성 요소)을 나열합니다.

  4. 리소스: assertionsresources 목록 섹션은 모두 설정 작업을 나타내는 개별 resource 노드로 구성됩니다. resource 원하는 상태를 {ModuleName}/{DscResource}적용하기 위해 호출될 모듈의 DSC 리소스 이름 뒤에 PowerShell 모듈의 이름이 지정되어야 합니다. 각 리소스에는 포함 directivessettings. 필요에 따라 값을 포함 id 할 수도 있습니다. 구성을 적용할 때 WinGet은 PowerShell 갤러리에서 모듈을 설치하고 지정된 DSC 리소스를 호출하는 것을 알게 됩니다.

  5. 지시문: 이 섹션에서는 directives 모듈 및 리소스에 대한 정보를 제공합니다. 이 섹션에는 모듈에서 description 수행하는 구성 작업을 설명하는 값이 포함되어야 합니다. 이 allowPrerelease 값을 사용하면 구성이 PowerShell 갤러리에서 "시험판" 모듈을 사용할 수true 있는지 여부를 선택할 수 있습니다.

  6. 설정: 리소스 값은 settings PowerShell DSC 리소스에 전달되는 이름-값 쌍의 컬렉션을 나타냅니다. 설정은 개발자 모드 사용 여부, reg 키 적용 또는 특정 네트워크 설정 설정에 이르기까지 모든 항목을 나타낼 수 있습니다.

  7. 종속성: 리소스 값은 이 dependsOn 작업을 시작하기 전에 다른 어설션 또는 리소스를 완료해야 하는지 여부를 결정합니다. 종속성이 실패하면 이 리소스도 자동으로 실패합니다.

  8. ID: 특정 리소스 인스턴스에 대한 고유 식별자입니다. 이 id 값은 다른 리소스가 먼저 적용되는 이 리소스에 대한 종속성이 있는 경우 사용할 수 있습니다.

리소스 구성 섹션

WinGet 구성 파일의 리소스 섹션을 구성하는 방법을 결정할 때 고려해야 할 여러 가지 방법이 있습니다. 다음을 통해 파일 목록을 구성할 수 있습니다.

  • 실행 순서: 실행해야 하는 논리적 순서에 따라 리소스 목록을 구성합니다. 이 방법은 사용자가 파일이 실행된 후 수행되는 자동화 단계(첫 번째, 두 번째 설치, 세 번째 설정 업데이트 등)를 이해하고 따르는 데 도움이 될 수 있습니다.
  • 실패 가능성: 잠재적인 실패 가능성에 따라 리소스 목록을 구성하면 사용자가 구성 프로세스에서 초기에 문제를 파악하고 나머지 단계가 실패하는 이유를 이해하는 데 도움이 되므로 많은 시간이 투자되기 전에 필요한 변경을 식별하고 변경할 수 있습니다.
  • 유사한 리소스 종류 그룹화: 유사한 리소스 종류를 그룹화하여 리소스 목록을 구성하는 것은 소프트웨어 엔지니어링 방법론에서 일반적인 접근 방식이며 사용자 또는 구성 파일을 활용하는 다른 개발자에게 가장 친숙할 수 있습니다.

파일 구조의 조직 접근 방식을 포함하는 오픈 소스 게시된 WinGet 구성 파일에 README.md 파일을 포함하는 것이 좋습니다.

${WinGetConfigRoot} 변수 사용

특정 DSC 리소스는 파일의 경로를 지정하는 매개 변수를 사용합니다. 전체 경로를 지정하는 대신 변수 ${WinGetConfigRoot} 를 사용하여 명령이 실행되는 작업 디렉터리를 winget configure 정의하고 해당 파일을 가리키는 상대 경로를 추가할 수 있습니다. 이는 컴퓨터와 관련이 없도록 구성 파일을 일반화하는 데 유용합니다. 위의 예제의 리소스는 Microsoft.VisualStudio.DSC/VSComponents 프로젝트의 루트 디렉터리에서 .vsconfig 파일을 가리키는 방법을 활용하여 ${WinGetConfigRoot} 이 기능을 보여 줍니다. 즉, 사용자가 명령을 실행 winget configure 하기 전에 현재 작업 디렉터리에 따라 상대 경로에 대상 파일이 있는지 확인해야 합니다.

PowerShell DSC 리소스 모듈을 찾을 수 있는 위치

다음을 포함하여 Microsoft에서 지원하는 즉시 사용할 수 있는("받은 편지함") PowerShell 필요한 상태 구성 리소스 목록을 확인합니다 .

  • 환경: 컴퓨터 또는 프로세스에 대한 환경 변수를 관리합니다.
  • MsiPackage: MSI 패키지를 설치하거나 제거합니다.
  • 레지스트리: 레지스트리 키 또는 값을 관리합니다.
  • 스크립트: PowerShell 스크립트 블록을 실행합니다.
  • 서비스: Windows 서비스를 관리합니다.
  • WindowsFeature: Windows 역할 또는 기능을 설치하거나 제거합니다.
  • WindowsProcess: Windows 프로세스를 시작하거나 중지합니다.

PowerShell 갤러리에서 PowerShell DSC 리소스 모듈을 찾을 수도 있습니다. 이 갤러리는 사용자 커뮤니티에서 제출한 DSC(Desired State Configuration) 리소스를 포함하는 수백 개의 PowerShell 모듈을 호스팅합니다. "범주" 아래에 "DSC 리소스" 필터를 적용하여 검색 결과를 필터링할 수 있습니다. 이 리포지토리는 Microsoft에서 확인하지 않으며 다양한 작성자와 게시자의 리소스를 포함합니다. 임의 스크립팅을 포함할 수 있으므로 사용되기 전에 항상 PowerShell 모듈에서 보안 및 신뢰성을 검토해야 합니다. 신뢰할 수 있는 WinGet 구성 파일을 만드는 방법에 대한 자세한 팁은 WinGet 구성 파일의 신뢰성을 확인하는 방법을 참조하세요.