Azure – PowerShell – Create a Virtual Machine (VM)

email me


Create a VM Using PowerShell

* this assumes you already have a virtual network setup

# 0 Before starting VM, create a Resource Group (if you don't have one)
New-AzResourceGroup -Name myRG1 -Location EastUS

# 1 Set the admin username and password
$cred = Get-Credential

# 2 Create the initial config
$vm = New-AzVMConfig -VMName myVM1 -VMSize Standard_D1

# 3 Add the OS Info
$vm = Set-AzVMOperatingSystem `
-VM $vm `
-Windows `
-ComputerName "LabPC1" `
-Credentials $cred `
-ProvisionVMAgent `
-EnableAutoUpdate

# 4 Add the image info
$vm = Set-AzVMSourceImage -VM $vm -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2016-Datacenter

# 5 Add OS settings
$vm = Set-AzVMOSDisk -VM $vm -Name myOsDisk1 -DiskSizeInGB 128 -CreatOption FromImage -Caching ReadWrite

# 6 Add the NIC
$vm = Add-AzVMNetworkInterface -VM $vm -Id $nic.Id

# 7 Create the VM
New-AzVM -ResourceGroupName myRGVM1 -Location EastUS -VM $vm

 

Create a VM Using PowerShell

* this assumes you do not have a virtual network setup

# 1 Create variables to store the location and resource group names.
$location = "local"
$ResourceGroupName = "myRG1"

New-AzureRmResourceGroup `
-Name $ResourceGroupName `
-Location $location

# 2 Create variables to store the storage account name and the storage account SKU information
$StorageAccountName = "mySA1"
$SkuName = "Standard_LRS"

# 3 Create a new storage account
$StorageAccount = New-AzureRMStorageAccount `
-Location $location `
-ResourceGroupName $ResourceGroupName `
-Type $SkuName `
-Name $StorageAccountName

Set-AzureRmCurrentStorageAccount `
-StorageAccountName $storageAccountName `
-ResourceGroupName $resourceGroupName

# 4 Create a subnet configuration
$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig `
-Name "mySubnet1" `
-AddressPrefix 192.168.1.0/24

# 5 Create a virtual network
$vnet = New-AzureRmVirtualNetwork `
-ResourceGroupName $ResourceGroupName `
-Location $location `
-Name "myVNet1" `
-AddressPrefix 192.168.0.0/16 `
-Subnet $subnetConfig

# 6 Create a public IP address and specify a DNS name
$pip = New-AzureRmPublicIpAddress `
-ResourceGroupName $ResourceGroupName `
-Location $location `
-AllocationMethod Static `
-IdleTimeoutInMinutes 4 `
-Name "mypublicdns$(Get-Random)"

# 7 Create an inbound network security group rule for port 3389
$nsgRuleRDP = New-AzureRmNetworkSecurityRuleConfig `
-Name "myNSGRuleRDP" `
-Protocol Tcp `
-Direction Inbound `
-Priority 1000 `
-SourceAddressPrefix * `
-SourcePortRange * `
-DestinationAddressPrefix * `
-DestinationPortRange 3389 `
-Access Allow

# 8 Create an inbound network security group rule for port 80
$nsgRuleWeb = New-AzureRmNetworkSecurityRuleConfig `
-Name "myNSGRuleWWW1" `
-Protocol Tcp `
-Direction Inbound `
-Priority 1001 `
-SourceAddressPrefix * `
-SourcePortRange * `
-DestinationAddressPrefix * `
-DestinationPortRange 80 `
-Access Allow

# 9 Create a network security group
$nsg = New-AzureRmNetworkSecurityGroup `
-ResourceGroupName $ResourceGroupName `
-Location $location `
-Name "myNSG1" `
-SecurityRules $nsgRuleRDP,$nsgRuleWeb

# 10 Create a virtual network card and associate it with public IP address and NSG
$nic = New-AzureRmNetworkInterface `
-Name "myNic1" `
-ResourceGroupName $ResourceGroupName `
-Location $location `
-SubnetId $vnet.Subnets[0].Id `
-PublicIpAddressId $pip.Id `
-NetworkSecurityGroupId $nsg.Id

# 11 Define a credential object to store the username and password for the VM
$UserName = 'AzureUsername'
$Password = 'AzurePassword'| ConvertTo-SecureString -Force -AsPlainText
$Credential = New-Object PSCredential($UserName,$Password)

# 12 Create the VM configuration object
$VmName = "VirtualMachinelatest"
$VmSize = "Standard_A1"
$VirtualMachine = New-AzureRmVMConfig `
-VMName $VmName `
-VMSize $VmSize

$VirtualMachine = Set-AzureRmVMOperatingSystem `
-VM $VirtualMachine `
-Windows `
-ComputerName "LabPC1" `
-Credential $Credential

$VirtualMachine = Set-AzureRmVMSourceImage `
-VM $VirtualMachine `
-PublisherName "MicrosoftWindowsServer" `
-Offer "WindowsServer" `
-Skus "2016-Datacenter" `
-Version "latest"

# 13 Sets the operating system disk properties on a VM.
$VirtualMachine = Set-AzureRmVMOSDisk `
-VM $VirtualMachine `
-CreateOption FromImage | `
Set-AzureRmVMBootDiagnostics -ResourceGroupName $ResourceGroupName `
-StorageAccountName $StorageAccountName -Enable |`
Add-AzureRmVMNetworkInterface -Id $nic.Id

# 14 Create the VM.
New-AzureRmVM `
-ResourceGroupName $ResourceGroupName `
-Location $location `
-VM $VirtualMachine

# 15 Return the IP address
$IP = Get-AzureRmPublicIpAddress -ResourceGroupName $ResourceGroupName | Select IpAddress

# 16 Connect to VM
mstsc /v $IP

 

 


Notes

Create a VM using the Portal

New-AzResourceGroup
New-AzVMConfig
Set-AzVMOperatingSystem
Set-AzVMSourceImage
Set-AzVMOSDisk
Add-AzVMNetworkInterface
New-AzVM

New-AzureRMStorageAccount
Set-AzureRmCurrentStorageAccount
New-AzureRmVirtualNetworkSubnetConfig
New-AzureRmVirtualNetwork
New-AzureRmPublicIpAddress
New-AzureRmNetworkSecurityRuleConfig
New-AzureRmNetworkSecurityGroup
New-AzureRmNetworkInterface
New-AzureRmVMConfig
Set-AzureRmVMOperatingSystem
Set-AzureRmVMSourceImage
Set-AzureRmVMOSDisk
Set-AzureRmVMBootDiagnostics

Add-AzureRmVMNetworkInterface
New-AzureRmVM
Get-AzureRmPublicIpAddress

 

tags: MrNetTek