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 구성을 컴파일할 때 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
수 있습니다.