You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建Azure VM时遇Cannot parse the request InvalidRequestFormat错误求助

Azure VM创建脚本错误排查:InvalidRequestFormat

你提供的创建Azure VM的脚本如下:

Connect-AzAccount

$cred = Get-Credential

$vm = New-AzVMConfig -VMName "MyVirtualVM" -VMSize "Standard_D1"

$vm = Set-AzVMOperatingSystem -VM $vm -Windows -ComputerName "MyVM" -Credential $cred -ProvisionVMAgent -EnableAutoUpdate

$vm = Set-AzVMSourceImage -VM $vm -PublisherName "MicrosoftWindowsServer" -Offer "WindowsServer" -Skus "2016-Datacenter" -Version "latest"

$vm = Set-AzVMOSDisk -VM $vm -Name "MyOSDisk" -DiskSizeInGB 128 -CreateOption FromImage -Caching ReadWrite

$vm = Add-AzVMNetworkInterface -VM $vm -Id "/subscriptions/{subscriptionid}/resourceGroups/myresource/providers/Microsoft.Network/virtualNetworks/myresource-vnet"

New-AzVM -ResourceGroupName "Prod-IT" -Location "EastUS" -VM $vm

运行后出现的错误:

New-AzVM : Cannot parse the request.
ErrorCode: InvalidRequestFormat
ErrorMessage: Cannot parse the request.
ErrorTarget: 
StatusCode: 400
ReasonPhrase: 
OperationID : 22637114-2ddd-49c2-a4b1-3748ac166e12
At line:15 char:1
+ New-AzVM -ResourceGroupName "Prod-IT" -Location "EastUS" -VM $vm
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [New-AzVM], ComputeCloudException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.Compute.NewAzureVMCommand

错误原因分析

  1. 网络接口参数错误:Add-AzVMNetworkInterface的-Id参数需要传入网络接口(NIC)的资源ID,但你传入的是虚拟网络的ID,二者是完全不同的资源类型,Azure无法解析该请求。
  2. 资源组不一致:脚本中NIC关联的资源组是myresource,但创建VM时指定的资源组是Prod-IT,VM和其关联的NIC必须处于同一个资源组,否则会导致请求解析失败。

修正后的脚本

以下是包含完整网络资源创建逻辑的修正脚本:

Connect-AzAccount

# 替换为你的实际参数
$subscriptionId = "你的订阅ID"
$resourceGroupName = "Prod-IT"
$location = "EastUS"
$vmName = "MyVirtualVM"
$computerName = "MyVM"
$vnetName = "myresource-vnet"
$subnetName = "default"
$nicName = "$vmName-nic"

# 切换到目标订阅
Set-AzContext -Subscription $subscriptionId

# 创建资源组(如果不存在)
if (-not (Get-AzResourceGroup -Name $resourceGroupName -ErrorAction SilentlyContinue)) {
    New-AzResourceGroup -Name $resourceGroupName -Location $location
}

# 创建虚拟网络(如果不存在)
$vnet = Get-AzVirtualNetwork -Name $vnetName -ResourceGroupName $resourceGroupName -ErrorAction SilentlyContinue
if (-not $vnet) {
    $subnetConfig = New-AzVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix "10.0.0.0/24"
    $vnet = New-AzVirtualNetwork -Name $vnetName -ResourceGroupName $resourceGroupName -Location $location -AddressPrefix "10.0.0.0/16" -Subnet $subnetConfig
}

# 创建网络接口(NIC)
$nic = Get-AzNetworkInterface -Name $nicName -ResourceGroupName $resourceGroupName -ErrorAction SilentlyContinue
if (-not $nic) {
    $subnetId = $vnet.Subnets | Where-Object { $_.Name -eq $subnetName } | Select-Object -ExpandProperty Id
    $nic = New-AzNetworkInterface -Name $nicName -ResourceGroupName $resourceGroupName -Location $location -SubnetId $subnetId
}

# 构建VM配置
$cred = Get-Credential
$vm = New-AzVMConfig -VMName $vmName -VMSize "Standard_D1"

$vm = Set-AzVMOperatingSystem -VM $vm -Windows -ComputerName $computerName -Credential $cred -ProvisionVMAgent -EnableAutoUpdate
$vm = Set-AzVMSourceImage -VM $vm -PublisherName "MicrosoftWindowsServer" -Offer "WindowsServer" -Skus "2016-Datacenter" -Version "latest"
$vm = Set-AzVMOSDisk -VM $vm -Name "$vmName-osdisk" -DiskSizeInGB 128 -CreateOption FromImage -Caching ReadWrite

# 添加正确的网络接口到VM
$vm = Add-AzVMNetworkInterface -VM $vm -Id $nic.Id

# 创建VM
New-AzVM -ResourceGroupName $resourceGroupName -Location $location -VM $vm

关键修正点

  • 先创建/获取合法的网络接口(NIC),将其ID传入Add-AzVMNetworkInterface
  • 确保VM、NIC、虚拟网络所有资源都处于同一个资源组Prod-IT
  • 添加资源存在性检查,避免重复创建已存在的资源

内容的提问来源于stack exchange,提问作者Raja Kondla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 15:02:35