Использование Import-DSCResource
Область применения: PowerShell 7, функция конфигурации компьютера автоматического управления Azure
Import-DSCResource
— это динамический ключевое слово, который можно использовать только внутри Configuration
блока для импорта всех ресурсов, необходимых в конфигурации DSC. Ресурсы DSC в разделе $PSHOME
импортируются автоматически, но рекомендуется явно импортировать все ресурсы 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
Пример. Использование Import-DSCResource в конфигурации DSC
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.
Рекомендуется указать ModuleName с параметром Name , как описано ниже.
Это обеспечивает следующие преимущества:
- Это снижает влияние на производительность, ограничивая область поиска для указанного ресурса DSC.
- Он явно определяет модуль, предоставляющий ресурс DSC, обеспечивая загрузку правильного ресурса DSC.
Примечание
Ресурсы DSC могут иметь несколько версий, а версии могут устанавливаться на компьютере параллельно. Это реализуется путем наличия нескольких версий модуля ресурсов DSC, которые содержатся в одной папке модуля.
IntelliSense с Import-DSCResource
При создании конфигурации DSC в VS Code PowerShell предоставляет IntelliSense для ресурсов DSC и свойств ресурсов DSC. Определения ресурсов в пути модуля $PSHOME
загружаются автоматически. При импорте ресурсов DSC с помощью Import-DSCResource
ключевое слово добавляются указанные определения ресурсов DSC, а IntelliSense развертывается для включения импортированных схем ресурсов DSC.
При компиляции конфигурации 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 и проверка схемы позволяют перехватывать больше ошибок во время анализа и компиляции, избегая будущих осложнений.
Примечание
Каждый ресурс DSC может иметь имя и FriendlyName , определенные схемой ресурса DSC.
Ниже приведены первые две строки MSFT_UserResource.schema.mof
.
[ClassVersion("1.0.0"), FriendlyName("User")]
class MSFT_UserResource : OMI_BaseResource
При использовании этого ресурса DSC в блоке Configuration
можно указать MSFT_UserResource
или User
.