Создайте виртуальную машину Azure с помощью PowerShell с существующей виртуальной сетью

#azure #azure-virtual-machine #azure-powershell

Вопрос:

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

 # Define Local Variables
$RG = "TestLab"
$Location = "eastus"
$UserName = "azadmin"
$Password = (ConvertTo-SecureString "Passw0rd123!" -Force -AsPlainText)
$VMName = "TestBox-VM-PS"
$VMSize = "Standard_D2as_V4"
$VirtualNetwork = "azTestBox01_vnet" #existing Vnet on different resource group
$Subnet = "TestBOX-Sub-10.0.0.0" #existing subnet on different resource group
$Friendly_Image_Name = "MicrosoftWindowsServer:WindowsServer:2019-Datacenter:Latest"


# Set credentials
$Credential = New-Object System.Management.Automation.PSCredential ($UserName, $Password)

New-AzVm `
-Name $VMName `
-ResourceGroupName $RG `
-Location $Location `
-VirtualNetworkName $VirtualNetwork `
-SubnetName $Subnet `
-Image $Friendly_Image_Name `
-Size $VMSize `
-Credential $Credential
 

Ответ №1:

К сожалению New-AzVM , командлет не позволяет указать группу ресурсов виртуальной сети, к которой вы хотите подключить виртуальную машину. Всегда предполагается, что виртуальная сеть находится в той же группе ресурсов, что и та, в которой развернута виртуальная машина.

Вы можете обойти это, шаг за шагом создавая конфигурацию для своей виртуальной машины:

 # Define Local Variables
$RG = "TestLab"
$Location = "westeurope"

$UserName = "azadmin"
$Password = (ConvertTo-SecureString "Passw0rd123!" -Force -AsPlainText)
$VMName = "TestBox-VM-PS"
$Credential = New-Object System.Management.Automation.PSCredential ($UserName, $Password)

$publisherName = "MicrosoftWindowsServer"
$offer = "WindowsServer"
$sku = "2019-Datacenter"
$version = "Latest"
$vNicName = "NetworkInterface1"

$VirtualNetwork = "azTestBox01_vnet" #existing Vnet on different resource group
$Subnet = "TestBOX-Sub-10.0.0.0" #existing subnet on different resource group
$vnetResourceGroupName = "TestLabVnet" #resource group of the existing subnet

New-AzResourceGroup -Name $RG -Location $Location
$vNet = Get-AzVirtualNetwork -Name $VirtualNetwork -ResourceGroupName $vnetResourceGroupName
$subnetId = $vNet.Subnets | Where-Object Name -eq $Subnet | Select-Object -ExpandProperty Id
$vNic = New-AzNetworkInterface -Name $vNicName -ResourceGroupName $RG -Location $Location -SubnetId $subnetId
$vm = New-AzVMConfig -VMName $VMName -VMSize $VMSize
$vm = Set-AzVMOperatingSystem -VM $vm -Windows -ComputerName $VMName -Credential $Credential -ProvisionVMAgent -EnableAutoUpdate
$vm = Add-AzVMNetworkInterface -VM $vm -Id $vNic.Id
$vm = Set-AzVMSourceImage -VM $vm -PublisherName $publisherName -Offer $offer -Skus $sku -Version $version
New-AzVM -ResourceGroupName $RG -Location $Location -VM $vm -Verbose