1

我正在尝试使用模板和 DSC 在 Azure 中自动构建 Windows VM。我的同事熟悉模板但不熟悉 PowerShell,我希望尽可能少地与 DSC 交互或运行 cmdlet。如果我不能用模板做所有事情,我想使用 Azure 门户。

我正在努力寻找一种非 PowerShell 方式将用户和组添加到本地管理员组。我认为最简单的过程是:

  1. 该模板有一个名为 的参数membersOfLocalAdmins。它的值将是单个字符串,例如mydomain\username,mydomain\groupname....

  2. 该模板在自动化帐户中创建一个变量,名为membersOfLocalAdmins-*New VM Name*. 它的值是管理员字符串。

  3. DSC 配置需要读取此变量。它当前有一个用于 VM 名称的参数。在 Azure 门户中,我们将转到自动化帐户,选择配置并单击编译。我们看到 VM 名称的提示并键入它,单击 OK。

DSC 配置必须读取名为 的自动化帐户变量membersOfLocalAdmins-*New VM Name*。然后将变量的值拆分为一个数组,并将其获取到其 Group 资源中。我已经尝试过类似下面的代码,但它不会编译,我认为配置中我可以使用 PowerShell 的唯一位置是脚本资源。有什么办法可以做到这一点,或者有更好的方法吗?

我还遇到了 Azure 门户中的编译 DSC 配置表单无法接受数组的问题。它读取mydomain\username,mydomain\groupname... 为单个字符串。如果我可以在它到达 Group 资源之前使用 PowerShell 将其拆分,那没关系。但是我应该把这个 PowerShell 放在哪里?

我想我将不得不使用脚本资源,将字符串拆分为一个数组并将其添加到管理员自己。凌乱。

$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
        }
4

1 回答 1

1

删除 $membersOfLocalAdmins 参数并更改组资源,如下所示。

     Group AddToLocalAdmins {
        GroupName ='Administrators'
        Ensure = 'Present'
        MembersToInclude = $((Get-AutomationVariable -Name "membersOfLocalAdmins-$ComputerName").Split(',').Trim())
        Credential = $DomainCredential
    }
于 2018-05-16T21:46:35.590 回答