Как получить конфигурацию Azure DSC для чтения переменной учетной записи службы автоматизации, имя которой является параметром?

Я пытаюсь автоматизировать создание виртуальных машин Windows в Azure, используя шаблон и DSC. Мои коллеги знакомы с шаблонами, но не с PowerShell, и мне нужно как можно меньше взаимодействовать с DSC или запускаемыми командлетами. Если я не могу делать все с помощью шаблона, я хочу использовать портал Azure.

Я изо всех сил пытаюсь найти способ, отличный от PowerShell, для добавления пользователей и групп в локальную группу администраторов. Я думаю, что самый простой процесс:

  1. В шаблоне есть параметр membersOfLocalAdmins. Его значение будет одной строкой типа mydomain\username,mydomain\groupname....

  2. Шаблон создает переменную в учетной записи автоматизации под названием membersOfLocalAdmins-*New VM Name*. Его значение - строка администраторов.

  3. Конфигурация DSC должна прочитать эту переменную. В настоящее время у него есть параметр для имени виртуальной машины. На портале Azure мы перейдем в учетную запись службы автоматизации, выберем конфигурацию и нажмем «Скомпилировать». Видим запрос имени ВМ и набираем его, жмем ОК.

Конфигурация DSC должна будет прочитать переменную учетной записи автоматизации с именем membersOfLocalAdmins-*New VM Name*. Затем разделите значение переменной на массив и перенесите его в ресурс Group. Я пробовал что-то вроде этого кода ниже, но он не компилируется, я думаю, что единственное место в конфигурации, где я могу использовать PowerShell, - это ресурс скрипта. Есть ли способ сделать это или лучший способ?

Я также столкнулся с проблемой, когда форма конфигурации компиляции DSC на портале Azure не может принимать массивы. Он читает mydomain\username,mydomain\groupname... как одну строку. Это нормально, если я могу использовать PowerShell, чтобы разделить его до того, как он попадет в ресурс Group. Но где бы я поместил эту PowerShell в конфигурацию?

Я думаю, мне придется использовать ресурс Script, разбить строку на массив и самому добавить его в Администраторы. Грязный.

$DomainUserName = Get-AutomationVariable -Name 'Internal_Domain_Username'
$DomainUserPassword = Get-AutomationVariable -Name 'Internal_Domain_Password'
$DomainCredential = New-Object -TypeName System.Management.Automation.PSCredential($DomainUserName, (ConvertTo-SecureString $DomainUserPassword -AsPlainText -Force))

Configuration TestConfiguration1Win10 {
    param(
        [string[]]$ComputerName = "localhost"
        ,
        [string[]]$membersOfLocalAdmins
    )

    # This if statement here causes the compile to fail. Is there anywhere else in the configuration I could put it?
    if (!$membersOfLocalAdmins){
        $membersOfLocalAdmins = $(Get-AutomationVariable -Name "membersOfLocalAdmins-@($ComputerName)[0]").Split(',')
    }

    Import-DscResource –ModuleName 'PSDesiredStateConfiguration'
    Import-DSCResource -Module xNetworking -Name xFirewallProfile
    Import-DSCResource -Module xSystemSecurity -Name xIEEsc
    Import-DscResource -ModuleName DeleteDscTmpFile

    Node $ComputerName {
        Group AddToLocalAdmins {
            GroupName ='Administrators'
            Ensure = 'Present'
            MembersToInclude = $membersOfLocalAdmins
            Credential = $DomainCredential
        }

person aberdeen angus    schedule 15.05.2018    source источник


Ответы (1)


Удаление параметра $ membersOfLocalAdmins и изменение ресурса группы, как показано ниже, помогли.

     Group AddToLocalAdmins {
        GroupName ='Administrators'
        Ensure = 'Present'
        MembersToInclude = $((Get-AutomationVariable -Name "membersOfLocalAdmins-$ComputerName").Split(',').Trim())
        Credential = $DomainCredential
    }
person aberdeen angus    schedule 16.05.2018