variablesnetworking设备别名和PowerShell DSC

我有一套Azure资源pipe理器和DSC脚本,用于将新虚拟机部署到Azure,然后使其成为新域的域控制器,这些工作很好,但现在它已经失败了DSC部分。

我相信这个问题是分配给虚拟机networking接口的别名。 我的DSC脚本具有以下部分来更改虚拟机指向它自己的DNS:

xDnsServerAddress DnsServerAddress { Address = '127.0.0.1' InterfaceAlias = 'Ethernet' AddressFamily = 'IPv4' } 

这个问题似乎是因为虚拟机networking接口实际上是用“以太网2”或“以太网3”的别名创build的,而别名需要匹配。 虚拟机中没有其他网卡,我没有添加任何网卡。 更奇怪的是,如果我尝试将此networking接口重命名为“以太网”,则告诉我已经有一个具有该名称的networking接口,尽pipe我找不到这个名称。

因此,为了使这项工作能够正常工作,我需要找出界面不仅仅是被命名为“以太网”的原因,还是编写DSC脚本的方法,以便它可以为机器上唯一的networking接口设置DNS。 有任何想法吗。

编辑:

这似乎与设备pipe理器将NIC标记为networking适配器#2有关,但是没有适配器#1,我也不能看到在部署过程中为什么会添加任何原因。 这似乎发生在此部署中的所有虚拟机(但它只打破了DC)。

网卡

我已经包括了我用来创build下面这个的ARM脚本,从MS Github模板中直接获取它。

 { "apiVersion": "2015-05-01-preview", "type": "Microsoft.Network/networkInterfaces", "name": "dc-nif", "location": "[resourceGroup().location]", "dependsOn": [ "Microsoft.Network/virtualNetworks/vnet" ], "properties": { "ipConfigurations": [ { "name": "ipconfig", "properties": { "privateIPAllocationMethod": "Static", "privateIPAddress": "[variables('dnsServerPrivateIp')]", "subnet": { "id": "[variables('BackEndSubnet-id')]" } } } ] } }, { "apiVersion": "2015-05-01-preview", "type": "Microsoft.Compute/virtualMachines", "name": "dc-vm", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.Storage/storageAccounts',parameters('newStorageAccountName'))]", "[resourceId('Microsoft.Network/networkInterfaces','dc-nif')]" ], "properties": { "hardwareProfile": { "vmSize": "Standard_A2" }, "osProfile": { "computername": "dc", "adminUsername": "[parameters('adminUsername')]", "adminPassword": "[parameters('adminPassword')]" }, "storageProfile": { "imageReference": { "publisher": "[variables('imagePublisher')]", "offer": "[variables('imageOffer')]", "sku": "[variables('imageSku')]", "version": "latest" }, "osDisk": { "name": "osdisk", "vhd": { "uri": "[concat('http://',parameters('newStorageAccountName'),'.blob.core.windows.net/vhds/dc-vm-os-disk.vhd')]" }, "caching": "ReadWrite", "createOption": "FromImage" }, "dataDisks": [ { "name": "dc-vm-data-disk", "vhd": { "Uri": "[concat('http://',parameters('newStorageAccountName'),'.blob.core.windows.net/vhds/dc-vm-data-disk.vhd')]" }, "caching": "None", "createOption": "Empty", "diskSizeGB": "100", "lun": 0 } ] }, "networkProfile": { "networkInterfaces": [ { "id": "[resourceId('Microsoft.Network/networkInterfaces','dc-nif')]" } ] } }, "resources": [ { "type": "Microsoft.Compute/virtualMachines/extensions", "name": "dc-vm/createadforest", "apiVersion": "2015-05-01-preview", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.Compute/virtualMachines', 'dc-vm')]" ], "properties": { "publisher": "Microsoft.Powershell", "type": "DSC", "typeHandlerVersion": "1.10", "settings": { "ModulesUrl": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/active-directory-new-domain/CreateADPDC.ps1.zip", "ConfigurationFunction": "CreateADPDC.ps1\\CreateADPDC", "Properties": { "DomainName": "[parameters('domainName')]", "AdminCreds": { "UserName": "[parameters('adminUsername')]", "Password": "PrivateSettingsRef:AdminPassword" } } }, "protectedSettings": { "Items": { "AdminPassword": "[parameters('adminPassword')]" } } } } ] }, 

可以将variables传递给DSC参数,从而允许您使用dynamic信息,在这种情况下,可以通过传递任何主机networking接口状态的假设。

例如

  xDnsServerAddress DnsServerAddress { Address = '127.0.0.1' InterfaceAlias = $firstActiveAdapter.InterfaceAlias AddressFamily = 'IPv4' } 

$ firstActiveAdaptervariables是通过以下方式创build的。

 $firstActiveAdapter = Get-NetAdapter -InterfaceDescription "Microsoft Hyper-V Network Adapter*" | Sort-Object -Property ifIndex | Select-Object -First 1 

上述命令将通过接口索引属性的顺序从安装的适配器列表中拉出第一个适配器。

该命令必须在系统中至less存在一个networking适配器的情况下运行,而不必在networking上处于活动状态才能成功执行命令。