Как получить конфигурацию Azure DSC для чтения переменной учетной записи автоматизации, имя которой является параметром? - PullRequest
0 голосов
/ 15 мая 2018

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

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

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

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

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

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

Я также столкнулся с проблемой, когда форма конфигурации DSC компиляции на портале Azure не может принимать массивы. Читается mydomain\username,mydomain\groupname... как одна строка. Это нормально, если я могу использовать PowerShell, чтобы разделить его, прежде чем он попадет в ресурс группы. Но куда бы я поместил этот 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
        }

1 Ответ

0 голосов
/ 17 мая 2018

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

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