다음을 통해 공유


Import-DSCResource 사용

적용 대상: PowerShell 7, Azure Automanage의 컴퓨터 구성 기능

Import-DSCResource는 DSC 구성에 필요한 리소스를 Configuration 가져오는 데 블록 내에서만 사용할 수 있는 동적 키워드(keyword). 아래 $PSHOME 의 DSC 리소스는 자동으로 가져오지만 DSC 구성에 사용되는 모든 DSC 리소스를 명시적으로 가져오는 것이 가장 좋습니다.

Import-DSCResource의 구문은 다음과 같습니다. 이름으로 모듈을 지정하는 경우 각 모듈을 새 줄에 나열해야 합니다.

Import-DscResource [-Name <ResourceName(s)>]
 [-ModuleName <ModuleName>]
 [-ModuleVersion <ModuleVersion>]

매개 변수

  • 이름 - 가져와야 하는 리소스입니다. 모듈 이름을 지정하면 명령은 해당 모듈 내에서 이러한 DSC 리소스를 검색합니다. 그렇지 않으면 명령은 모든 모듈에서 DSC 리소스를 검색합니다. 와일드카드가 지원됩니다.
  • ModuleName - 모듈 이름 또는 모듈 사양입니다. 모듈에서 가져올 DSC 리소스를 지정하는 경우 명령은 해당 DSC 리소스만 가져오려고 시도합니다. 모듈만 지정하는 경우 명령은 모듈의 모든 DSC 리소스를 가져옵니다.
  • ModuleVersion - 구성에서 이 매개 변수와 함께 사용해야 하는 모듈의 버전을 지정할 수 있습니다. 기본적으로 사용 가능한 최신 버전의 DSC 리소스를 가져옵니다.
Import-DSCResource -ModuleName xActiveDirectory

예: DSC 구성 내에서 Import-DSCResource 사용

Configuration MSDSCConfiguration {
    # Search for and imports two DSC Resources from the PSDscResources module.
    Import-DSCResource -ModuleName PSDscResources -Name Service, Registry

    # Search for and import Resource1 from the module that defines it. If only
    # the -Name parameter is used then resources can belong to different
    # PowerShell modules as well. TimeZone resource is from the
    # ComputerManagementDSC module which is not installed by default. As a best
    # practice, list each requirement on a different line if possible.  This
    # makes reviewing  multiple changes in source control a bit easier.
    Import-DSCResource -Name Service
    Import-DSCResource -Name TimeZone

    # Search for and import all DSC resources inside the PSDscResources module.
    # When specifying the ModuleName parameter, it is a requirement to list each
    # on a new line.
    Import-DSCResource -ModuleName PSDscResources
    # You can specify a ModuleVersion parameter
    Import-DSCResource -ModuleName ComputerManagementDsc -ModuleVersion 6.0.0.0
...

참고

동일한 명령에서 DSC 리소스 이름 및 모듈 이름에 여러 값을 지정하는 것은 지원되지 않습니다. 동일한 DSC 리소스가 여러 모듈에 있는 경우 모듈에서 로드할 DSC 리소스에 대한 비결정적 동작이 있을 수 있습니다. 아래 명령은 컴파일 중에 오류 발생을 반환합니다.

Import-DSCResource -Name Service, TimeZone -ModuleName PSDscResources, xPSDesiredStateConfiguration

Name 매개 변수만 사용할 때 고려해야 할 사항:

  • 컴퓨터에 설치된 모듈 수에 따라 리소스를 많이 사용하는 작업입니다.
  • 지정된 이름으로 찾은 첫 번째 DSC 리소스를 로드합니다. 이름이 같은 DSC 리소스가 둘 이상 설치된 경우 잘못된 DSC 리소스를 로드할 수 있습니다.

권장되는 사용법은 아래에 설명된 대로 Name 매개 변수를 사용하여 ModuleName을 지정하는 것입니다.

이 방법은 다음과 같은 이점이 있습니다.

  • 지정된 DSC 리소스에 대한 검색 scope 제한하여 성능 영향을 줄입니다.
  • DSC 리소스를 제공하는 모듈을 명시적으로 정의하여 올바른 DSC 리소스가 로드되도록 합니다.

참고

DSC 리소스에는 여러 버전이 있을 수 있으며 버전은 컴퓨터에 나란히 설치할 수 있습니다. 이는 동일한 모듈 폴더에 포함된 여러 버전의 DSC 리소스 모듈을 사용하여 구현됩니다.

Import-DSCResource 있는 IntelliSense

VS Code에서 DSC 구성을 작성할 때 PowerShell은 DSC 리소스 및 DSC 리소스 속성에 대한 IntelliSense를 제공합니다. $PSHOME 모듈 경로 아래에 있는 리소스 정의가 자동으로 로드됩니다. 키워드(keyword) 사용하여 Import-DSCResource DSC 리소스를 가져오면 지정된 DSC 리소스 정의가 추가되고 가져온 DSC 리소스의 스키마를 포함하도록 IntelliSense가 확장됩니다.

DSC 리소스에 대한 VS Code의 IntelliSense

DSC 구성을 컴파일할 때 PowerShell은 가져온 DSC 리소스 정의를 사용하여 블록의 DSC 리소스 블록의 유효성을 Configuration 검사합니다. 각 DSC 리소스 블록은 다음 규칙에 대해 DSC 리소스의 스키마 정의에 의해 유효성이 검사됩니다.

  • 스키마에 정의된 속성만 지정됩니다.
  • 각 속성의 데이터 형식이 올바릅니다.
  • 키 속성이 지정됩니다.
  • 읽기 전용 속성이 지정되지 않았습니다.

다음 DSC 구성을 고려합니다.

Configuration SchemaValidationInCorrectEnumValue {
    Import-DSCResource -Name User -Module PSDscResources

    User ExampleUser {
        UserName = 'ExampleDscUser'
        Ensure   = 'Invalid'
    }
}

이 DSC 구성을 컴파일하면 오류가 발생합니다.

Write-Error: C:\code\dsc\sample.ps1:4:5
Line |
   4 |      User ExampleUser {
     |      ~~~~
     | At least one of the values 'Invalid' is not supported or   
     | valid for property 'Ensure' on class 'User'. Please specify
     | only supported values: Present, Absent.

InvalidOperation: Errors occurred while processing configuration
'SchemaValidationInCorrectEnumValue'.

IntelliSense 및 스키마 유효성 검사를 사용하면 구문 분석 및 컴파일 시간 동안 더 많은 오류를 catch하여 향후 복잡성을 방지할 수 있습니다.

참고

각 DSC 리소스에는 DSC 리소스의 스키마로 정의된 이름과 FriendlyName 이 있을 수 있습니다. 다음은 의 처음 두 줄입니다 MSFT_UserResource.schema.mof.

[ClassVersion("1.0.0"), FriendlyName("User")]
class MSFT_UserResource : OMI_BaseResource

블록에서 이 DSC 리소스를 Configuration 사용하는 경우 또는 User를 지정할 MSFT_UserResource 수 있습니다.

참고 항목