Использование данных конфигурации в DSC
Область применения: Windows PowerShell 4.0, Windows PowerShell 5.0
С помощью встроенного параметра DSC ConfigurationData можно определить данные, которые будут использоваться в конфигурации. Это позволяет создать единую конфигурацию, которую можно использовать для нескольких узлов или для различных сред. Например, при разработке приложения можно использовать одну и ту же конфигурацию для среды разработки и для рабочей среды и указать данные для каждой среды с помощью данных конфигурации.
В этом разделе описывается структура хэш-таблицы ConfigurationData. Примеры использования данных конфигурации см. в статье Разделение данных конфигурации и данных среды.
Общий параметр ConfigurationData
Конфигурация DSC принимает общий параметр ConfigurationData. Этот параметр указывается при компиляции конфигурации. Дополнительные сведения о компилировании конфигураций см. в статье Конфигурации DSC.
Параметр ConfigurationData представляет собой хэш-таблицу, в которой должен быть по меньшей мере один ключ с именем AllNodes. В ней также может быть один или несколько других ключей.
Примечание
В примерах в этом разделе используется один дополнительный ключ (помимо ключа AllNodes) с именем NonNodeData
, но вы можете включить любое число дополнительных ключей и указать для них любые имена.
$MyData =
@{
AllNodes = @()
NonNodeData = ""
}
Значение ключа AllNodes представляет собой массив. Каждый элемент этого массива также является хэш-таблицей, в которой должен быть по меньшей мере один ключ с именем AllNodes:
$MyData =
@{
AllNodes =
@(
@{
NodeName = "VM-1"
},
@{
NodeName = "VM-2"
},
@{
NodeName = "VM-3"
}
);
NonNodeData = ""
}
В каждую хэш-таблицу можно добавить и другие ключи:
$MyData =
@{
AllNodes =
@(
@{
NodeName = "VM-1"
Role = "WebServer"
},
@{
NodeName = "VM-2"
Role = "SQLServer"
},
@{
NodeName = "VM-3"
Role = "WebServer"
}
);
NonNodeData = ""
}
Чтобы применить свойство ко всем узлам, можно создать элемент массива AllNodes, значение параметра NodeName для которого будет равно *
. Например, чтобы присвоить каждому узлу свойство LogPath
, можно написать следующее:
$MyData =
@{
AllNodes =
@(
@{
NodeName = "*"
LogPath = "C:\Logs"
},
@{
NodeName = "VM-1"
Role = "WebServer"
SiteContents = "C:\Site1"
SiteName = "Website1"
},
@{
NodeName = "VM-2"
Role = "SQLServer"
},
@{
NodeName = "VM-3"
Role = "WebServer"
SiteContents = "C:\Site2"
SiteName = "Website3"
}
);
}
Это аналогично добавлению свойства с именем LogPath
и значением "C:\Logs"
в каждый из других блоков (VM-1
, VM-2
и VM-3
).
Определение хэш-таблицы ConfigurationData
Хэш-таблицу ConfigurationData можно определить в виде переменной в файле сценария конфигурации (как в наших предыдущих примерах) или в отдельном файле типа .psd1
. Чтобы определить хэш-таблицу ConfigurationData в файле типа .psd1
, создайте файл, который будет содержать только хэш-таблицу, представляющую данные конфигурации.
Например, можно создать файл с именем MyData.psd1
и со следующим содержимым:
@{
AllNodes =
@(
@{
NodeName = 'VM-1'
FeatureName = 'Web-Server'
},
@{
NodeName = 'VM-2'
FeatureName = 'Hyper-V'
}
)
}
Компиляция конфигурации с помощью данных конфигурации
Чтобы компилировать конфигурацию с заданными данными, их нужно передать как значение параметра ConfigurationData.
При этом создается MOF-файл для каждой записи в массиве AllNodes. Каждый MOF-файл будет назван с использованием свойства NodeName
соответствующей записи массива.
Например, если вы определяете данные конфигурации, как в файле MyData.psd1
выше, при компиляции конфигурации будут созданы файлы VM-1.mof
и VM-2.mof
.
Компиляция конфигурации с помощью данных конфигурации с использованием переменной
Чтобы использовать данные конфигурации, определенные в качестве переменной, в том же файле .ps1
, что и конфигурация, передайте имя переменной в качестве значения параметра ConfigurationData при компиляции конфигурации:
MyDscConfiguration -ConfigurationData $MyData
Компиляция конфигурации с помощью данных конфигурации с использованием файла данных
Чтобы использовать данные конфигурации, которая определена в PSD1-файле, передайте путь и имя этого файла в качестве значения параметра ConfigurationData при компиляции конфигурации:
MyDscConfiguration -ConfigurationData .\MyData.psd1
Использование переменных ConfigurationData в конфигурации
DSC предоставляет следующие специальные переменные, которые могут использоваться в сценарии конфигурации:
- $AllNodes относится ко всей коллекции узлов, определенных в ConfigurationData. Коллекцию AllNodes можно отфильтровать с помощью .Where() и .ForEach().
- ConfigurationData ссылается на всю хэш-таблицу, которая передается в качестве параметра при компиляции конфигурации.
- MyTypeName содержит имя конфигурации, в которой используется переменная. Например, в конфигурации
MyDscConfiguration
$MyTypeName
будет иметь значениеMyDscConfiguration
. - После фильтрации коллекции с помощью .Where() или .ForEach() элемент Node будет указывать на конкретную запись в AllNodes.
- Дополнительные сведения об этих методах в см. в разделе about_arrays.
Использование данных, отличных от данных узла
Как видно из предыдущих примеров, хэш-таблица ConfigurationData кроме требуемого ключа AllNodes может содержать один или несколько ключей. В примерах в этом разделе мы использовали только один дополнительный узел, назвав его NonNodeData
. Но вы можете определить любое число дополнительных ключей и назвать их как угодно.
Пример использования данных, отличных от данных узла, см. в статье Разделение данных конфигурации и данных среды.