Powershell
可變網路設備別名和 PowerShell DSC
我有一組 Azure 資源管理器和 DSC 腳本,用於將新 VM 部署到 Azure,然後使其成為新域的域控制器,這些在一段時間內執行良好,但現在 DSC 部分失敗了。
我認為問題出在分配給虛擬機網路介面的別名上。我的 DSC 腳本具有以下部分來更改 VM 以指向其自身的 DNS:
xDnsServerAddress DnsServerAddress { Address = '127.0.0.1' InterfaceAlias = 'Ethernet' AddressFamily = 'IPv4' }
出現問題的原因似乎是虛擬機網路介面實際上是使用“Ethernet 2”或“Ethernet 3”的別名創建的,並且別名需要匹配。虛擬機中沒有其他網卡,我也沒有添加任何網卡。更奇怪的是,如果我嘗試將此網路介面重命名為“乙太網”,它會告訴我已經有一個具有該名稱的網路介面,即使我找不到對此的引用。
因此,要使這項工作正常工作,我需要找出介面不只是被命名為“乙太網”的原因,或者是一種編寫 DSC 腳本的方法,以便它可以為機器上的唯一網路介面設置 DNS。有任何想法嗎。
編輯:
這似乎與設備管理器已將 NIC 標記為網路適配器 #2 的事實有關,但沒有適配器 #1,我也看不出在部署過程中添加任何適配器的任何原因。這似乎發生在此部署中的所有 VM 上(但它只會破壞 DC)。
我在下面也包含了我用來創建它的 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')]" } } } } ] },
可以將變數傳遞給 DSC 參數,從而允許您使用動態資訊,在這種情況下,通過傳遞主機網路介面狀態的任何假設。
例如
xDnsServerAddress DnsServerAddress { Address = '127.0.0.1' InterfaceAlias = $firstActiveAdapter.InterfaceAlias AddressFamily = 'IPv4' }
$firstActiveAdapter 變數是使用以下內容創建的。
$firstActiveAdapter = Get-NetAdapter -InterfaceDescription "Microsoft Hyper-V Network Adapter*" | Sort-Object -Property ifIndex | Select-Object -First 1
上述命令將按介面索引屬性的順序從已安裝適配器列表中拉出第一個適配器。
該命令必須在系統上至少存在一個網路適配器時執行,它還不必在網路上處於活動狀態以使命令成功。