Microsoft Docs

Your central resource for Microsoft products and services.

Azure PowerShell Examples: Virtual Machines

Explore practical examples of using Azure PowerShell cmdlets to manage your virtual machines. From creation and configuration to scaling and monitoring, these scripts provide a solid foundation for automating your Azure VM operations.

Create and Configure a New Virtual Machine

This example demonstrates how to create a basic Windows VM in Azure, including specifying resource group, location, VM size, and credentials.

VM Creation Windows Basic Configuration
# Define variables
$resourceGroupName = "MyResourceGroup"
$location = "East US"
$vmName = "MyWinVM"
$vmSize = "Standard_DS1_v2"
$adminUsername = "azureuser"
$adminPassword = ConvertTo-SecureString "YourSecurePassword123!" -AsPlainText -Force

# Create a resource group if it doesn't exist
New-AzResourceGroup -Name $resourceGroupName -Location $location -Force

# Create a virtual machine
New-AzVM `
    -ResourceGroupName $resourceGroupName `
    -Name $vmName `
    -Location $location `
    -ImageWin2019Datacenter `
    -Size $vmSize `
    -Credential (New-Object System.Management.Automation.PSCredential($adminUsername, $adminPassword)) `
    -OpenPorts 3389 # RDP

Write-Host "VM '$vmName' created successfully in resource group '$resourceGroupName'."

Start, Stop, and Restart a Virtual Machine

Manage the lifecycle of your existing Azure VMs. This script shows how to start a deallocated VM, stop a running VM, and restart a VM.

VM Lifecycle Start Stop Restart
# Define variables
$resourceGroupName = "MyResourceGroup"
$vmName = "MyWinVM"

# Get the VM object
$vm = Get-AzVM -ResourceGroupName $resourceGroupName -Name $vmName

# Start the VM
# Start-AzVM -ResourceGroupName $resourceGroupName -Name $vmName

# Stop the VM (deallocate it to save costs)
# Stop-AzVM -ResourceGroupName $resourceGroupName -Name $vmName -Force

# Restart the VM
Restart-AzVM -ResourceGroupName $resourceGroupName -Name $vmName

Write-Host "VM '$vmName' has been restarted."

Attach a New Data Disk to a Virtual Machine

Expand the storage capacity of your VM by attaching a new managed data disk. This script creates a new managed disk and attaches it to an existing VM.

Storage Data Disk Managed Disk
# Define variables
$resourceGroupName = "MyResourceGroup"
$vmName = "MyWinVM"
$diskName = "MyDataDisk"
$diskSizeGB = 100
$lun = 0 # Logical Unit Number for the disk

# Get the VM object
$vm = Get-AzVM -ResourceGroupName $resourceGroupName -Name $vmName

# Create a new managed disk
$disk = New-AzDisk `
    -DiskName $diskName `
    -ResourceGroupName $resourceGroupName `
    -Location $vm.Location `
    -CreateOption Empty `
    -DiskSizeGB $diskSizeGB `
    -StorageAccountType Standard_LRS

# Create the disk configuration
$diskConfig = New-AzVMDataDisk `
    -Name $diskName `
    -CreateOption Attach `
    -ManagedDiskId $disk.Id `
    -Lun $lun

# Update the VM with the new data disk
Add-AzVMDataDisk `
    -VM $vm `
    -DataDisk $diskConfig

# Update the VM in Azure
Update-AzVM `
    -ResourceGroupName $resourceGroupName `
    -VM $vm

Write-Host "Data disk '$diskName' attached to VM '$vmName'."

Get Public IP Address of a Virtual Machine

Retrieve the public IP address assigned to your Azure VM, which is essential for connecting to it from the internet.

Networking Public IP Connection
# Define variables
$resourceGroupName = "MyResourceGroup"
$vmName = "MyWinVM"

# Get the VM object
$vm = Get-AzVM -ResourceGroupName $resourceGroupName -Name $vmName

# Get the network interface of the VM
$nic = Get-AzNetworkInterface -ResourceGroupName $resourceGroupName -Name $vm.NetworkProfile.NetworkInterfaces[0].Id.Split('/')[-1]

# Get the public IP configuration from the NIC
$ipConfig = $nic.IpConfigurations[0]

# Get the public IP address object
$publicIp = Get-AzPublicIpAddress -ResourceGroupName $resourceGroupName -Name $ipConfig.PublicIpAddress.Id.Split('/')[-1]

Write-Host "Public IP Address for '$vmName': $($publicIp.IpAddress)"