Поделиться через


Использование конфигурационных данных в DSC

Область применения: Windows PowerShell 4.0, Windows PowerShell 5.0

С помощью встроенного параметра DSC ConfigurationData можно определить данные, которые могут использоваться в конфигурации. Это позволяет создать единую конфигурацию, которую можно использовать для нескольких узлов или для разных сред. Например, при разработке приложения можно использовать одну конфигурацию как для среды разработки, так и для рабочей среды, а также использовать данные конфигурации для указания данных для каждой среды.

В этом разделе описывается структура хэш-таблицы ConfigurationData . Примеры использования данных конфигурации см. в разделе Разделение данных конфигурации и среды.

Общий параметр ConfigurationData

Конфигурация DSC принимает общий параметр ConfigurationData, который указывается при компиляции конфигурации. Сведения о компиляции конфигураций см. в разделе Конфигурации DSC.

Параметр ConfigurationData — это хэш-таблица, которая должна иметь хотя бы один ключ с именем AllNodes. Он также может иметь один или несколько других ключей.

Замечание

В примерах в этом разделе используется один дополнительный ключ (отличный от именованного ключа AllNodes ) с именем NonNodeData, но вы можете включить любое количество дополнительных ключей и назвать их как угодно.

$MyData =
@{
    AllNodes = @()
    NonNodeData = ""
}

Значением ключа AllNodes является массив. Каждый элемент этого массива также является хеш-таблицей, которая должна иметь хотя бы один ключ с именем NodeName:

$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 файлов and VM-2.mof .

Компиляция конфигурации с конфигурационными данными с помощью переменной

Чтобы использовать данные конфигурации, которые определены как переменная в том же .ps1 файле, что и конфигурация, необходимо передать имя переменной в качестве значения параметра ConfigurationData при компиляции конфигурации:

MyDscConfiguration -ConfigurationData $MyData

Компиляция конфигурации с конфигурационными данными с помощью файла данных

Чтобы использовать данные конфигурации, определенные в файле .psd1, необходимо передать путь и имя этого файла в качестве значения параметра ConfigurationData при компиляции конфигурации:

MyDscConfiguration -ConfigurationData .\MyData.psd1

Использование переменных ConfigurationData в конфигурации

DSC предоставляет следующие специальные переменные, которые можно использовать в сценарии конфигурации:

  • $AllNodes относится ко всей коллекции узлов, определенной в ConfigurationData. Коллекцию AllNodes можно отфильтровать с помощью . Where() и . Для Each().
  • ConfigurationData относится ко всей хеш-таблице, которая передается в качестве параметра при компиляции конфигурации.
  • MyTypeName содержит имя конфигурации , в которой используется переменная. Например, в конфигурации MyDscConfiguration, которое $MyTypeName будет иметь значение MyDscConfiguration.
  • Node относится к определенной записи в коллекции AllNodes после ее фильтрации с помощью . Where() или . Для Each().
    • Подробнее об этих способах вы можете прочитать в about_arrays

Использование данных, не относящихся к узлам

Как мы видели в предыдущих примерах, хэш-таблица ConfigurationData может иметь один или несколько ключей в дополнение к обязательному ключу AllNodes . В примерах в этом разделе мы использовали только один дополнительный узел и назвали его NonNodeData. Тем не менее, вы можете определить любое количество дополнительных ключей и назвать их как угодно.

Пример использования данных, не относящихся к узлу, см. в разделе Разделение данных конфигурации и среды.

См. также