#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