다음을 통해 공유


Import-DSCResource 사용

Import-DSCResource 는 구성 스크립트 블록 내에서만 사용하여 구성에 필요한 리소스를 가져올 수 있는 동적 키워드입니다. 아래의 $PSHOME 리소스는 자동으로 가져오지만 구성에 사용된 모든 리소스를 명시적으로 가져오는 것이 여전히 모범 사례로 간주됩니다.

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

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

매개 변수

  • -Name - 가져와야 하는 DSC 리소스 이름입니다. 모듈 이름이 지정되면 명령은 이 모듈 내에서 이러한 DSC 리소스를 검색합니다. 그렇지 않으면 명령은 모든 DSC 리소스 경로에서 DSC 리소스를 검색합니다. 와일드카드가 지원됩니다.
  • -ModuleName - 모듈 이름 또는 모듈 스펙입니다. 모듈에서 가져올 자원을 지정하면 명령은 해당 자원만 가져오려고 시도합니다. 모듈만 지정하는 경우 명령은 모듈의 모든 DSC 리소스를 가져옵니다.
  • -ModuleVersion - PowerShell 5.0부터 구성에서 사용해야 하는 모듈 버전을 지정할 수 있습니다. 자세한 내용은 설치된 리소스의 특정 버전 가져오기를 참조하세요.
Import-DscResource -ModuleName xActiveDirectory

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

Configuration MSDSCConfiguration
{
    # Search for and imports Service, File, and Registry from the module PSDesiredStateConfiguration.
    Import-DSCResource -ModuleName PSDesiredStateConfiguration -Name Service, File, Registry

    # Search for and import Resource1 from the module that defines it.
    # If only –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 File
    Import-DSCResource -Name TimeZone

    # Search for and import all DSC resources inside the module PSDesiredStateConfiguration.
    # When specifying the modulename parameter, it is a requirement to list each on a new line.
    Import-DSCResource -ModuleName PSDesiredStateConfiguration
    # In PowerShell 5.0 and later, you can specify a ModuleVersion parameter
    Import-DSCResource -ModuleName ComputerManagementDsc -ModuleVersion 6.0.0.0
...

비고

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

Import-DscResource -Name UserConfigProvider*,TestLogger1 -ModuleName UserConfigProv,PsModuleForTestLogger

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

  • 시스템에 설치된 모듈 수에 따라 리소스 집약적인 작업입니다.
  • 지정된 이름으로 찾은 첫 번째 리소스를 로드합니다. 동일한 이름의 리소스가 두 개 이상 설치된 경우 잘못된 리소스를 로드할 수 있습니다.

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

이 사용법에는 다음과 같은 이점이 있습니다.

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

비고

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

Import-DSCResource 있는 Intellisense

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

DSC 리소스에 대한 ISE의 Intellisense

비고

PowerShell 5.0부터 DSC 리소스 및 해당 속성에 대한 ISE에 탭 완성이 추가되었습니다. 자세한 내용은 리소스를 참조하세요.

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

  • 스키마에 정의된 속성만 사용됩니다.
  • 각 속성의 데이터 형식이 올바릅니다.
  • 키 속성이 지정됩니다.
  • 읽기 전용 속성은 사용되지 않습니다.
  • 값 맵 형식에 대한 유효성 검사.

다음 구성을 고려하십시오.

Configuration SchemaValidationInCorrectEnumValue
{
    # It is best practice to explicitly import all resources used in your Configuration.
    # This includes resources that are imported automatically, like WindowsFeature.
    Import-DSCResource -Name WindowsFeature
    Node localhost
    {
        WindowsFeature ROLE1
        {
            Name = "Telnet-Client"
            Ensure = "Invalid"
        }
    }
}

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

PSDesiredStateConfiguration\WindowsFeature: At least one of the values 'Invalid' is not supported or
valid for property 'Ensure' on class 'WindowsFeature'. Please specify only supported values:
Present, Absent.

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

비고

각 DSC 리소스에는 이름과 리소스의 스키마에 의해 정의된 FriendlyName 이 있을 수 있습니다. 아래는 "MSFT_ServiceResource.shema.mof"의 처음 두 줄입니다.

[ClassVersion("1.0.0"),FriendlyName("Service")]
class MSFT_ServiceResource : OMI_BaseResource

구성에서 이 리소스를 사용할 때 MSFT_ServiceResource 또는 서비스를 지정할 수 있습니다.

PowerShell v4 및 v5 차이점

PowerShell 4.0과 PowerShell 5.0 이상에서 구성을 작성할 때 표시되는 여러 가지 차이점이 있습니다. 이 섹션에서는 이 문서와 관련된 차이점을 강조 표시합니다.

여러 리소스 버전

PowerShell 4.0에서는 여러 버전의 리소스를 나란히 설치하고 사용하는 것이 지원되지 않았습니다. 리소스를 구성으로 가져오는 데 문제가 있는 경우 리소스의 버전이 하나만 설치되어 있는지 확인합니다.

아래 이미지에는 두 가지 버전의 xPSDesiredStateConfiguration 모듈이 설치되어 있습니다.

폴더에 설치된 여러 리소스 버전

원하는 모듈 버전의 내용을 모듈 디렉토리의 최상위 레벨에 복사하십시오.

원하는 버전을 최상위 모듈 디렉토리에 복사합니다.

리소스 위치

구성을 작성하고 컴파일할 때 PSModulePath로 지정된 모든 디렉터리에 리소스를 저장할 수 있습니다. PowerShell 4.0에서 LCM은 모든 DSC 리소스 모듈을 "Program Files\WindowsPowerShell\Modules" 또는 $pshome\Modules. PowerShell 5.0부터 이 요구 사항이 제거되었으며 리소스 모듈은 로 지정된 PSModulePath모든 디렉터리에 저장할 수 있습니다.

ModuleVersion이 추가됨

PowerShell 5.0부터 매개 변수를 -ModuleVersion 사용하면 구성 내에서 사용할 모듈 버전을 지정할 수 있습니다.

참고하십시오