Compartilhar via


New-AzVMConfig

Cria um objeto de máquina virtual configurável.

Sintaxe

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>]

Description

O cmdlet New-AzVMConfig cria um objeto de máquina virtual local configurável para o Azure.

Os seguintes cmdlets são usados para definir propriedades diferentes do objeto da máquina virtual:

Exemplos

Exemplo 1: Criar um recurso de máquina virtual

$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 -String "****" -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;

Exemplo 2: Criar um objeto de máquina virtual em um conjunto de dimensionamento de máquinas virtuais com a configuração de domínios de falha

$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 -String "****" -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;

Exemplo 2: criar uma VM usando o objeto de configuração da máquina virtual para o tipo de segurança TrustedLaunch, os sinalizadores Vtpm e Secure Boot são definidos como True por padrão.

$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
$securePassword = ConvertTo-SecureString -String "****" -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;

Este exemplo cria uma VM usando um objeto VMConfig para o tipo de segurança TrustedLaunch e valida sinalizadores VtpmEnabled e SecureBootEnabled como verdadeiros por padrão.

Parâmetros

-AvailabilitySetId

Especifica a ID de um conjunto de disponibilidade. Para obter um objeto de conjunto de disponibilidade, use o cmdlet Get-AzAvailabilitySet. O objeto do conjunto de disponibilidade contém uma propriedade ID.
As máquinas virtuais especificadas no mesmo conjunto de disponibilidade são alocadas a nós diferentes para maximizar a disponibilidade.
Para obter mais informações sobre conjuntos de disponibilidade, consulte Gerenciar a disponibilidade de máquinas virtuais.
Para obter mais informações sobre a manutenção planejada do Azure, consulte Manutenção planejada para máquinas virtuais no Azure
Atualmente, uma VM só pode ser adicionada ao conjunto de disponibilidade no momento da criação. O conjunto de disponibilidade ao qual a VM está sendo adicionada deve estar no mesmo grupo de recursos que o recurso do conjunto de disponibilidade. Uma VM existente não pode ser adicionada a um conjunto de disponibilidade.
Essa propriedade não pode existir junto com uma referência properties.virtualMachineScaleSet não nula.

Tipo:String
Cargo:2
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-CapacityReservationGroupId

ID do grupo de reserva de capacidade usado para alocar.

Tipo:String
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-DefaultProfile

As credenciais, a conta, o locatário e a assinatura usados para comunicação com o Azure.

Tipo:IAzureContextContainer
Aliases:AzContext, AzureRmContext, AzureCredential
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-DiskControllerType

Especifica o tipo de controlador de disco configurado para a VM e VirtualMachineScaleSet. Essa propriedade só tem suporte para máquinas virtuais cujo disco do sistema operacional e SKU de VM dão suporte à Geração 2 (https://learn.microsoft.com/en-us/azure/virtual-machines/generation-2), verifique a funcionalidade HyperVGenerations retornada como parte dos recursos de SKU de VM na resposta da API Microsoft.Compute SKUs para a região contém V2 (https://learn.microsoft.com/rest/api/compute/resourceskus/list) .
Para obter mais informações sobre os tipos de controlador de disco suportados, consulte https://aka.ms/azure-diskcontrollertypes.

Tipo:String
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-EnableSecureBoot

Especifica se a inicialização segura deve ser habilitada na máquina virtual.

Tipo:Nullable<T>[Boolean]
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-EnableUltraSSD

Habilita a capacidade de ter um ou mais discos de dados gerenciados com UltraSSD_LRS tipo de conta de armazenamento na VM. Os discos gerenciados com o tipo de conta de armazenamento UltraSSD_LRS podem ser adicionados a uma máquina virtual somente se essa propriedade estiver habilitada.

Tipo:SwitchParameter
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-EnableVtpm

Especifica se o vTPM deve ser habilitado na máquina virtual.

Tipo:Nullable<T>[Boolean]
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-EncryptionAtHost

A propriedade EncryptionAtHost pode ser usada pelo usuário na solicitação para habilitar ou desabilitar a Criptografia de Host para a máquina virtual ou o conjunto de dimensionamento de máquinas virtuais. Isso habilitará a criptografia para todos os discos, incluindo o disco de recurso/temporário no próprio host. Padrão: a criptografia no host será desabilitada, a menos que essa propriedade seja definida como true para o recurso.

Tipo:SwitchParameter
Cargo:Named
Valor padrão:False
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-EvictionPolicy

A política de remoção da máquina virtual do Azure Spot. Os valores com suporte são 'Deallocate' e 'Delete'.

Tipo:String
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-HibernationEnabled

O sinalizador que habilita ou desabilita o recurso de hibernação na VM.

Tipo:SwitchParameter
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-HostId

O ID do host

Tipo:String
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-IdentityId

Especifica a lista de identidades de usuário associadas ao conjunto de dimensionamento de máquinas virtuais. As referências de identidade do usuário serão IDs de recurso do ARM no formato: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/identities/{identityName}'

Tipo:String[]
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-IdentityType

A identidade da máquina virtual, se configurada.

Tipo:Nullable<T>[ResourceIdentityType]
Valores aceitos:SystemAssigned, UserAssigned, SystemAssignedUserAssigned, None
Cargo:4
Valor padrão:None
Obrigatório:True
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-ImageReferenceId

Especificação da ID exclusiva da imagem da galeria compartilhada para implantação de VM. Isso pode ser obtido na chamada GET da imagem da galeria compartilhada.

Tipo:String
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-LicenseType

Especifica um tipo de licença, que indica que a imagem ou o disco da máquina virtual foi licenciado localmente. Os valores possíveis para o Windows Server são:

  • Windows_Client
  • Windows_Server

Os valores possíveis para o sistema operacional Linux Server são:

  • RHEL_BYOS (para RHEL)
  • SLES_BYOS (para SUSE)
Tipo:String
Cargo:3
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-MaxPrice

Especifica o preço máximo que você está disposto a pagar por uma VM/VMSS de baixa prioridade. Este preço está em dólares americanos. Esse preço será comparado com o preço de baixa prioridade atual para o tamanho da VM. Além disso, os preços são comparados no momento da criação/atualização da VM/VMSS de baixa prioridade e a operação só será bem-sucedida se o maxPrice for maior que o preço de baixa prioridade atual. O maxPrice também será usado para remover uma VM/VMSS de baixa prioridade se o preço de baixa prioridade atual ultrapassar o maxPrice após a criação da VM/VMSS. Os valores possíveis são: qualquer valor decimal maior que zero. Exemplo: 0,01538. -1 indica que a VM/VMSS de baixa prioridade não deve ser removida por motivos de preço. Além disso, o preço máximo padrão é -1 se não for fornecido por você.

Tipo:Double
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-PlatformFaultDomain

Especifica o domínio de falha da máquina virtual.

Tipo:Int32
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-Priority

A prioridade da máquina virtual. Os únicos valores suportados são 'Regular', 'Spot' e 'Low'. 'Regular' é para máquina virtual regular. 'Spot' é para máquina virtual spot. 'Low' também é para máquina virtual spot, mas é substituído por 'Spot'. Por favor, use 'Spot' em vez de 'Low'.

Tipo:String
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-ProximityPlacementGroupId

A ID do recurso do Grupo de Posicionamento por Proximidade a ser usado com essa máquina virtual.

Tipo:String
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-SecurityType

Especifica o SecurityType da máquina virtual. Ele deve ser definido como qualquer valor especificado para habilitar UefiSettings. Por padrão, UefiSettings não será habilitado a menos que essa propriedade seja definida.

Tipo:String
Valores aceitos:TrustedLaunch, ConfidentialVM, Standard
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-SharedGalleryImageId

Especificação da ID exclusiva da imagem da galeria compartilhada para implantação de VM. Isso pode ser obtido na chamada GET da imagem da galeria compartilhada.

Tipo:String
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-Tags

As tags anexadas ao recurso.

Tipo:Hashtable
Aliases:Tag
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-UserData

UserData para a VM, que será codificada em base 64. O cliente não deve passar nenhum segredo aqui.

Tipo:String
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-vCPUCountAvailable

Especifica o número de vCPUs disponíveis para a VM. Quando essa propriedade não é especificada no corpo da solicitação, o comportamento padrão é defini-la como o valor de vCPUs disponíveis para esse tamanho de VM exposto na resposta da API de Listar todos os tamanhos de máquina virtual disponíveis em uma região.

Tipo:Int32
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-vCPUCountPerCore

Especifica a proporção de vCPU para núcleo físico. Quando essa propriedade não é especificada no corpo da solicitação, o comportamento padrão é definido como o valor de vCPUsPerCore para o Tamanho da VM exposto na resposta da API de Listar todos os tamanhos de máquina virtual disponíveis em uma região. Definir essa propriedade como 1 também significa que o hyper-threading está desabilitado.

Tipo:Int32
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-VMName

Especifica um nome para a máquina virtual.

Tipo:String
Aliases:ResourceName, Name
Cargo:0
Valor padrão:None
Obrigatório:True
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-VMSize

Especifica o tamanho da máquina virtual. Get-AzComputeResourceSku pode ser usado para descobrir os tamanhos disponíveis para sua assinatura e região.

Tipo:String
Cargo:1
Valor padrão:None
Obrigatório:True
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-VmssId

A ID do conjunto de dimensionamento de máquinas virtuais

Tipo:String
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-Zone

Especifica a zona de disponibilidade da máquina virtual. Embora ele use uma matriz de zonas, as máquinas virtuais não dão suporte a várias zonas de disponibilidade. O valor permitido depende dos recursos da região. O valor permitido normalmente será 1, 2 ou 3. Mais informações sobre as zonas de disponibilidade do Azure.

Tipo:String[]
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

Entradas

String

String[]

Hashtable

SwitchParameter

Saídas

PSVirtualMachine