你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

New-AzVMConfig

创建可配置的虚拟机对象。

语法

New-AzVMConfig
   [-VMName] <String>
   [-VMSize] <String>
   [[-AvailabilitySetId] <String>]
   [[-LicenseType] <String>]
   [-Zone <String[]>]
   [-ProximityPlacementGroupId <String>]
   [-HostId <String>]
   [-VmssId <String>]
   [-MaxPrice <Double>]
   [-EvictionPolicy <String>]
   [-Priority <String>]
   [-Tags <Hashtable>]
   [-EnableUltraSSD]
   [-EncryptionAtHost]
   [-CapacityReservationGroupId <String>]
   [-ImageReferenceId <String>]
   [-DiskControllerType <String>]
   [-UserData <String>]
   [-PlatformFaultDomain <Int32>]
   [-HibernationEnabled]
   [-vCPUCountAvailable <Int32>]
   [-vCPUCountPerCore <Int32>]
   [-SharedGalleryImageId <String>]
   [-SecurityType <String>]
   [-EnableVtpm <Boolean>]
   [-EnableSecureBoot <Boolean>]
   [-DefaultProfile <IAzureContextContainer>]
   [<CommonParameters>]
New-AzVMConfig
   [-VMName] <String>
   [-VMSize] <String>
   [[-AvailabilitySetId] <String>]
   [[-LicenseType] <String>]
   [-IdentityType] <ResourceIdentityType>
   [-IdentityId <String[]>]
   [-Zone <String[]>]
   [-ProximityPlacementGroupId <String>]
   [-HostId <String>]
   [-VmssId <String>]
   [-MaxPrice <Double>]
   [-EvictionPolicy <String>]
   [-Priority <String>]
   [-Tags <Hashtable>]
   [-EnableUltraSSD]
   [-EncryptionAtHost]
   [-CapacityReservationGroupId <String>]
   [-ImageReferenceId <String>]
   [-DiskControllerType <String>]
   [-UserData <String>]
   [-PlatformFaultDomain <Int32>]
   [-HibernationEnabled]
   [-vCPUCountAvailable <Int32>]
   [-vCPUCountPerCore <Int32>]
   [-SharedGalleryImageId <String>]
   [-SecurityType <String>]
   [-EnableVtpm <Boolean>]
   [-EnableSecureBoot <Boolean>]
   [-DefaultProfile <IAzureContextContainer>]
   [<CommonParameters>]

说明

New-AzVMConfig cmdlet 为 Azure 创建可配置的本地虚拟机对象。

以下 cmdlet 用于设置虚拟机对象的不同属性:

示例

示例 1:创建虚拟机资源

$rgname = "resourceGroupName";
$loc = "eastus";

New-AzResourceGroup -Name $rgname -Location $loc -Force;

# General Setup
$vmname = 'v' + $rgname;
$domainNameLabel = "d1" + $rgname;
$vmSize = 'Standard_DS3_v2';
$computerName = "c" + $rgname;
$securityTypeStnd = "Standard";
        
# Credential. Input Username and Password values
$user = "";
$securePassword = "" | ConvertTo-SecureString -AsPlainText -Force;  
$cred = New-Object System.Management.Automation.PSCredential ($user, $securePassword);
        
# Creating a VMConfig 
$vmconfig = New-AzVMConfig -VMName $vmname -vmsize $vmsize -SecurityType $securityTypeStnd;

# Set source image values
$publisherName = "MicrosoftWindowsServer";
$offer = "WindowsServer";
$sku = "2019-DataCenter";
$vmconfig = Set-AzVMSourceImage -VM $vmconfig -PublisherName $publisherName -Offer $offer -Skus $sku -Version 'latest';

# NRP Setup
$subnet = New-AzVirtualNetworkSubnetConfig -Name ('subnet' + $rgname) -AddressPrefix "10.0.0.0/24";
$vnet = New-AzVirtualNetwork -Force -Name ('vnet' + $rgname) -ResourceGroupName $rgname -Location $loc -AddressPrefix "10.0.0.0/16" -Subnet $subnet;
$vnet = Get-AzVirtualNetwork -Name ('vnet' + $rgname) -ResourceGroupName $rgname;
$subnetId = $vnet.Subnets[0].Id;
$pubip = New-AzPublicIpAddress -Force -Name ('pubip' + $rgname) -ResourceGroupName $rgname -Location $loc -AllocationMethod Static -DomainNameLabel $domainNameLabel;
$pubip = Get-AzPublicIpAddress -Name ('pubip' + $rgname) -ResourceGroupName $rgname;
$pubipId = $pubip.Id;
$nic = New-AzNetworkInterface -Force -Name ('nic' + $rgname) -ResourceGroupName $rgname -Location $loc -SubnetId $subnetId -PublicIpAddressId $pubip.Id;
$nic = Get-AzNetworkInterface -Name ('nic' + $rgname) -ResourceGroupName $rgname;
$nicId = $nic.Id;

$vmconfig = Add-AzVMNetworkInterface -VM $vmconfig -Id $nicId;
$vmconfig = Set-AzVMOperatingSystem -VM $vmconfig -Windows -ComputerName $computerName -Credential $cred;

# Create the VM
New-AzVM -ResourceGroupName $rgname -Location $loc -Vm $vmconfig;
$vm = Get-AzVM -ResourceGroupName $rgname -Name $vmname;

示例 2:使用容错域设置在虚拟机规模集中创建虚拟机对象

$rgname = "resourceGroupName";
$loc = "eastus";
$vmname = "vm" + $rgname;

New-AzResourceGroup -Name $rgname -Location $loc -Force;

$domainNameLabel = "d1" + $rgname;
$vmname = "v" + $rgname;
$vnetname = "myVnet";
$vnetAddress = "10.0.0.0/16";
$subnetname = "slb" + $rgname;
$subnetAddress = "10.0.2.0/24";
$vmssName = "vmss" + $rgname;
$faultDomainNumber = 2;
$vmssFaultDomain = 3;
$securityTypeStnd = "Standard";

$OSDiskName = $vmname + "-osdisk";
$NICName = $vmname+ "-nic";
$NSGName = $vmname + "-NSG";
$OSDiskSizeinGB = 128;
$VMSize = "Standard_DS2_v2";
$PublisherName = "MicrosoftWindowsServer";
$Offer = "WindowsServer";
$SKU = "2019-Datacenter";
        
# Credential. Input Username and Password values.
$user = "";
$securePassword = "" | ConvertTo-SecureString -AsPlainText -Force;  
$cred = New-Object System.Management.Automation.PSCredential ($user, $securePassword);

$frontendSubnet = New-AzVirtualNetworkSubnetConfig -Name $subnetname -AddressPrefix $subnetAddress;
$vnet = New-AzVirtualNetwork -Name $vnetname -ResourceGroupName $rgname -Location $loc -AddressPrefix $vnetAddress -Subnet $frontendSubnet;

$vmssConfig = New-AzVmssConfig -Location $loc -PlatformFaultDomainCount $vmssFaultDomain -SecurityType $securityTypeStnd;
$vmss = New-AzVmss -ResourceGroupName $RGName -Name $VMSSName -VirtualMachineScaleSet $vmssConfig;

$nsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name RDP  -Protocol Tcp  -Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 3389 -Access Allow;
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $RGName -Location $loc -Name $NSGName  -SecurityRules $nsgRuleRDP;
$nic = New-AzNetworkInterface -Name $NICName -ResourceGroupName $RGName -Location $loc -SubnetId $vnet.Subnets[0].Id -NetworkSecurityGroupId $nsg.Id -EnableAcceleratedNetworking;

# VM
$vmConfig = New-AzVMConfig -VMName $vmName -VMSize $VMSize  -VmssId $vmss.Id -PlatformFaultDomain $faultDomainNumber -SecurityType $securityTypeStnd;
Set-AzVMOperatingSystem -VM $vmConfig -Windows -ComputerName $vmName -Credential $cred ;
Set-AzVMOSDisk -VM $vmConfig -StorageAccountType "Premium_LRS" -Caching ReadWrite -Name $OSDiskName -DiskSizeInGB $OSDiskSizeinGB -CreateOption FromImage ;
Set-AzVMSourceImage -VM $vmConfig -PublisherName $PublisherName -Offer $Offer -Skus $SKU -Version latest ;
Add-AzVMNetworkInterface -VM $vmConfig -Id $nic.Id;

New-AzVM -ResourceGroupName $RGName -Location $loc -VM $vmConfig;
$vm = Get-AzVM -ResourceGroupName $rgname -Name $vmName;

示例 2:使用 TrustedLaunch 安全类型的虚拟机配置对象创建 VM,默认情况下,标志 Vtpm 和安全启动设置为 True。

$rgname = "rgname";
$loc = "eastus";
New-AzResourceGroup -Name $rgname -Location $loc -Force;    
 
# VM Profile & Hardware
$domainNameLabel = "d1" + $rgname;
$vmsize = 'Standard_D4s_v3';
$vmname = $rgname + 'Vm';
$securityType_TL = "TrustedLaunch";
$vnetname = "myVnet";
$vnetAddress = "10.0.0.0/16";
$subnetname = "slb" + $rgname;
$subnetAddress = "10.0.2.0/24";
$OSDiskName = $vmname + "-osdisk";
$NICName = $vmname+ "-nic";
$NSGName = $vmname + "-NSG";
$OSDiskSizeinGB = 128;
$PublisherName = "MicrosoftWindowsServer";
$Offer = "WindowsServer";
$SKU = "2016-datacenter-gensecond";
$disable = $false;
$enable = $true;
$extDefaultName = "GuestAttestation";
$vmGADefaultIDentity = "SystemAssigned";
# Credential
$password = <Password>;
$securePassword = $password | ConvertTo-SecureString -AsPlainText -Force;  
$user = <Username>;
$cred = New-Object System.Management.Automation.PSCredential ($user, $securePassword);
# Network resources
$frontendSubnet = New-AzVirtualNetworkSubnetConfig -Name $subnetname -AddressPrefix $subnetAddress;
$vnet = New-AzVirtualNetwork -Name $vnetname -ResourceGroupName $rgname -Location $loc -AddressPrefix $vnetAddress -Subnet $frontendSubnet;
$nsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name RDP  -Protocol Tcp  -Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 3389 -Access Allow;
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $rgname -Location $loc -Name $NSGName  -SecurityRules $nsgRuleRDP;
$nic = New-AzNetworkInterface -Name $NICName -ResourceGroupName $rgname -Location $loc -SubnetId $vnet.Subnets[0].Id -NetworkSecurityGroupId $nsg.Id -EnableAcceleratedNetworking;
# Configure Values using VMConfig Object
$vmConfig = New-AzVMConfig -VMName $vmname -VMSize $vmsize;
Set-AzVMOperatingSystem -VM $vmConfig -Windows -ComputerName $vmname -Credential $cred;
Set-AzVMSourceImage -VM $vmConfig -PublisherName $PublisherName -Offer $Offer -Skus $SKU -Version latest ;
Add-AzVMNetworkInterface -VM $vmConfig -Id $nic.Id;
  
# VM Creation using VMConfig for Trusted Launch SecurityType
$vmConfig = Set-AzVMSecurityProfile -VM $vmConfig -SecurityType $securityType_TL;
New-AzVM -ResourceGroupName $rgname -Location $loc -VM $vmConfig;
$vm = Get-AzVM -ResourceGroupName $rgname -Name $vmname;
# Validate that for -SecurityType "TrustedLaunch", "-Vtpm" and "-SecureBoot" are "Enabled/true"
#$vm.SecurityProfile.UefiSettings.VTpmEnabled $true;
#$vm.SecurityProfile.UefiSettings.SecureBootEnabled $true;

此示例使用 TrustedLaunch 安全类型的 VMConfig 对象创建 VM,并验证 VtpmEnabled 和 SecureBootEnabled 默认为 true 的标志。

参数

-AvailabilitySetId

指定可用性集的 ID。 若要获取可用性集对象,请使用 Get-AzAvailabilitySet cmdlet。 可用性集对象包含 ID 属性。
在同一可用性集中指定的虚拟机分配给不同的节点,以最大程度地提高可用性。
有关可用性集的详细信息,请参阅 管理虚拟机的可用性。
有关 Azure 计划内维护的详细信息,请参阅 Azure 中虚拟机的计划内维护
目前,只能在创建时将 VM 添加到可用性集。 要向其添加 VM 的可用性集应与可用性集资源位于同一资源组下。 无法将现有 VM 添加到可用性集。
此属性不能与非 null properties.virtualMachineScaleSet 引用一起存在。

Type:String
Position:2
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-CapacityReservationGroupId

用于分配的容量预留组的 ID。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DefaultProfile

用于与 Azure 通信的凭据、帐户、租户和订阅。

Type:IAzureContextContainer
Aliases:AzContext, AzureRmContext, AzureCredential
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DiskControllerType

指定为 VM 和 VirtualMachineScaleSet 配置的磁盘控制器类型。 只有操作系统磁盘和 VM SKU 支持第 2 代(https://learn.microsoft.com/en-us/azure/virtual-machines/generation-2)的虚拟机才支持此属性,检查作为 VM SKU 功能的一部分返回的 HyperVGenerations 功能,响应该区域的 Microsoft.Compute SKU API 包含 V2(https://learn.microsoft.com/rest/api/compute/resourceskus/list) 。
有关支持的磁盘控制器类型的详细信息,请参阅 https://aka.ms/azure-diskcontrollertypes

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-EnableSecureBoot

指定是否应在虚拟机上启用安全启动。

Type:Nullable<T>[Boolean]
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-EnableUltraSSD

允许在 VM 上使用UltraSSD_LRS存储帐户类型的一个或多个托管数据磁盘。 仅当启用此属性时,才能将存储帐户类型UltraSSD_LRS的托管磁盘添加到虚拟机。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-EnableVtpm

指定是否应在虚拟机上启用 vTPM。

Type:Nullable<T>[Boolean]
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-EncryptionAtHost

请求中的用户可以使用 EncryptionAtHost 属性来启用或禁用虚拟机或虚拟机规模集的主机加密。 这将为所有磁盘启用加密,包括主机本身的资源/临时磁盘。 默认值:除非将此属性设置为 true,否则将禁用主机上的加密。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-EvictionPolicy

Azure 现成虚拟机的逐出策略。 支持的值为“Deallocate”和“Delete”。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-HibernationEnabled

在 VM 上启用或禁用休眠功能的标志。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-HostId

主机的 ID

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-IdentityId

指定与虚拟机规模集关联的用户标识列表。 用户标识引用的格式为 ARM 资源 ID:“/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/identities/{identityName}”

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-IdentityType

虚拟机的标识(如果已配置)。

Type:Nullable<T>[ResourceIdentityType]
Accepted values:SystemAssigned, UserAssigned, SystemAssignedUserAssigned, None
Position:4
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-ImageReferenceId

为 vm 部署指定共享库映像唯一 ID。 这可以从共享库映像 GET 调用中提取。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-LicenseType

指定许可证类型,指示虚拟机的映像或磁盘在本地获得许可。 Windows Server 的可能值为:

  • Windows_Client
  • Windows_Server

Linux Server 操作系统的可能值为:

  • RHEL_BYOS(适用于 RHEL)
  • SLES_BYOS(适用于 SU标准版)
Type:String
Position:3
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxPrice

指定愿意为低优先级 VM/VMSS 付费的最高价格。 这个价格是美元。 此价格将与 VM 大小的当前低优先级价格进行比较。 此外,在创建/更新低优先级 VM/VMSS 时会比较价格,只有在 maxPrice 大于当前低优先级价格时,该操作才会成功。 如果当前低优先级价格超出创建 VM/VMSS 后 maxPrice,maxPrice 还用于逐出低优先级 VM/VMSS。 可能的值为:任何大于零的十进制值。 示例:0.01538。 -1 表示不应出于价格原因逐出低优先级 VM/VMSS。 此外,如果默认的最大价格不是由你提供,则为 -1。

Type:Double
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-PlatformFaultDomain

指定虚拟机的容错域。

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Priority

虚拟机的优先级。 仅支持的值是“Regular”、“Spot”和“Low”。 “Regular”适用于常规虚拟机。 “Spot”适用于现成虚拟机。 “Low”也适用于现成虚拟机,但被“Spot”取代。 请使用“Spot”而不是“Low”。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-ProximityPlacementGroupId

要用于此虚拟机的邻近放置组的资源 ID。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-SecurityType

指定虚拟机的 SecurityType。 必须将其设置为任何指定值才能启用 Uefi设置。 默认情况下,除非设置了此属性,否则不会启用 Uefi设置。

Type:String
Accepted values:TrustedLaunch, ConfidentialVM, Standard
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-SharedGalleryImageId

为 vm 部署指定共享库映像唯一 ID。 这可以从共享库映像 GET 调用中提取。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Tags

附加到资源的标记。

Type:Hashtable
Aliases:Tag
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-UserData

将进行 base-64 编码的 VM 的 UserData。 客户不应在此处传递任何机密。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-vCPUCountAvailable

指定可用于 VM 的 vCPU 数。 如果未在请求正文中指定此属性,则默认行为是将其设置为 API 响应 中公开的 VM 大小的 vCPU 值,以列出区域中所有可用的虚拟机大小。

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-vCPUCountPerCore

指定 vCPU 与物理核心比率。 如果未在请求正文中指定此属性,则默认行为设置为 API 响应中公开的 VM 大小的 vCPUUsPerCore 值,以 列出区域中所有可用的虚拟机大小。 将此属性设置为 1 也意味着禁用超线程处理。

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-VMName

指定虚拟机的名称。

Type:String
Aliases:ResourceName, Name
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-VMSize

指定虚拟机的大小。 Get-AzComputeResourceSku 可用于查找订阅和区域的可用大小。

Type:String
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-VmssId

虚拟机规模集的 ID

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Zone

指定虚拟机的可用性区域。 尽管它采用区域数组,但虚拟机不支持多个可用性区域。 允许的值取决于区域的功能。 允许的值通常为 1、2 或 3。 有关 Azure 可用性区域的详细信息

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

输入

String

String[]

Hashtable

SwitchParameter

输出

PSVirtualMachine