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가 가져온 리소스의 스키마를 포함하도록 확장됩니다.
비고
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 사용하면 구성 내에서 사용할 모듈 버전을 지정할 수 있습니다.