我正在尝试使用模板和 DSC 在 Azure 中自动构建 Windows VM。我的同事熟悉模板但不熟悉 PowerShell,我希望尽可能少地与 DSC 交互或运行 cmdlet。如果我不能用模板做所有事情,我想使用 Azure 门户。
我正在努力寻找一种非 PowerShell 方式将用户和组添加到本地管理员组。我认为最简单的过程是:
该模板有一个名为 的参数
membersOfLocalAdmins
。它的值将是单个字符串,例如mydomain\username,mydomain\groupname...
.该模板在自动化帐户中创建一个变量,名为
membersOfLocalAdmins-*New VM Name*
. 它的值是管理员字符串。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
}