Q. How can I create an IaaS VM using Azure Resource Manager?

A. To create a VM using Azure Resource Manager (ARM) and regular PowerShell, use the following. The resources used need to reside under ARM which means the Virtual Network and Storage Account which is why I create new ones as part of this PowerShell.

Firstly connect to Azure using Azure AD authentication:

                              Add-AzureAccount

Switch to ARM mode:

                              Switch-AzureMode -Name AzureResourceManager

Set the subscription to use:

                              Set-AzureSubscription -SubscriptionName 'Windows Azure Internal Consumption' -CurrentStorageAccount 'savtechstoreeastus' 

For detailed help run:

                              get-help new-azurevm -examples

which has complete code to create a new Azure VM.

Below are the main points and have some corrections over the example in the help.

 

                              
#Set basic values
$rgname = 'SavillTechRGEastUS'
$loc = 'East US'
$vmsize = 'Standard_A2';
$vmname = 'testvm44';
# Setup Storage
$stoname = 'savtechrgeastuslrs';
$stotype = 'Standard_LRS';

#Create a new ARM storage account
New-AzureStorageAccount -ResourceGroupName $rgname -Name $stoname -Location $loc -Type $stotype
$stoaccount = Get-AzureStorageAccount -ResourceGroupName $rgname -Name $stoname;

# Create VM Object
$vm = New-AzureVMConfig -VMName $vmname -VMSize $vmsize;

# Setup Networking with a new virtual network with a single subnet
$subnet = New-AzureVirtualNetworkSubnetConfig -Name ('subnet' + $rgname) -AddressPrefix "10.0.0.0/24"
$vnet = New-AzureVirtualNetwork -Force -Name ('vnet' + $rgname) -ResourceGroupName $rgname -Location $loc -AddressPrefix "10.0.0.0/16" -DnsServer "10.1.1.1" -Subnet $subnet
$vnet = Get-AzureVirtualNetwork -Name ('vnet' + $rgname) -ResourceGroupName $rgname
$subnetId = $vnet.Subnets[0].Id

#Create a VM NIC attached to the subnet
$nic = New-AzureNetworkInterface -Force -Name ('nic' + $vmname) -ResourceGroupName $rgname -Location $loc -SubnetId $subnetId;
$nic = Get-AzureNetworkInterface -Name ('nic' + $vmname) -ResourceGroupName $rgname;
$nicId = $nic.Id;

# Add NIC to VM
$vm = Add-AzureVMNetworkInterface -VM $vm -Id $nicId;

# Set OS disk values
$osDiskName = 'osDisk';
$osDiskCaching = 'ReadWrite';
$osDiskVhdUri = "https://$stoname.blob.core.windows.net/test/os.vhd";

# Setup OS & Image
$user = "localadmin";
$password = 'Pa55word5';
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force;
$cred = New-Object System.Management.Automation.PSCredential ($user, $securePassword);

$computerName = $vmname;
$vhdContainer = "https://$stoname.blob.core.windows.net/$computerName";
Get-AzureVMImage -Location 'East US' -PublisherName 'MicrosoftWindowsServer' -Offer 'WindowsServer' -Skus '2012-R2-Datacenter'
Get-AzureVMImageDetail -Location 'East US' -PublisherName 'MicrosoftWindowsServer' -Offer 'WindowsServer' -Skus '2012-R2-Datacenter' -Version '4.0.201504'

#Apply the various configurations
$vm = Set-AzureVMOperatingSystem -VM $vm -Windows -ComputerName $computerName -Credential $cred;
$vm = Set-AzureVMSourceImage -VM $vm -PublisherName 'MicrosoftWindowsServer' -Offer 'WindowsServer' -Skus '2012-R2-Datacenter' -Version '4.0.201504'
$vm = Set-AzureVMOSDisk -VM $vm -VhdUri "$vhdContainer/testos.vhd" -name 'TestOS' -CreateOption fromImage

# Create Virtual Machine
New-AzureVM -ResourceGroupName $rgname -Location $loc -Name $vmname -VM $vm;

Below is a successful creation and it will show in the new Azure portal under Virtual machines (v2).

                              
PS C:\> New-AzureVM -ResourceGroupName $rgname -Location $loc -Name $vmname -VM $vm;


EndTime : 5/26/2015 10:38:15 AM -05:00
Error :
Output :
StartTime : 5/26/2015 10:34:42 AM -05:00
Status : Succeeded
TrackingOperationId : 5517dc8b-947f-4316-b3da-130c8bbb3ed3
RequestId : 7f9eee61-27d4-4d6b-ac58-6794a1603f96
StatusCode : OK