| author | sdwheeler |
|---|---|
| description | Learn how to use the PowerShell in your browser with Azure Cloud Shell. |
| manager | mkluck |
| ms.author | sewhee |
| ms.contributor | jahelmic |
| ms.custom | devx-track-azurepowershell, ignite-fall-2021 |
| ms.date | 11/14/2022 |
| ms.service | cloud-shell |
| ms.tgt_pltfrm | vm-linux |
| ms.topic | article |
| ms.workload | infrastructure-services |
| tags | azure-resource-manager |
| title | Quickstart for PowerShell in Azure Cloud Shell |
This document details how to use the PowerShell in Cloud Shell in the Azure portal.
The PowerShell experience in Azure Cloud Shell now runs PowerShell 7.2 in a Linux environment. There are differences in the PowerShell experience in Cloud Shell compared Windows PowerShell.
The filesystem in Linux is case-sensitive. Windows considers file.txt and FILE.txt to be the
same file. In Linux, they're considered to be different files. Proper casing must be used while
tab-completing in the filesystem. PowerShell specific experiences, such as tab-completing cmdlet
names, parameters, and values, aren't case-sensitive.
For a detailed list of differences, see PowerShell differences on non-Windows platforms.
-
Select on Cloud Shell button from the top navigation bar of the Azure portal
-
Select the PowerShell environment from the drop-down and you'll be in Azure drive
(Azure:)
Run regular PowerShell commands in the Cloud Shell, such as:
PS Azure:\> Get-Date
# You will see output similar to the following:
Friday, July 27, 2018 7:08:48 AM
PS Azure:\> Get-AzVM -Status
# You will see output similar to the following:
ResourceGroupName Name Location VmSize OsType ProvisioningState PowerState
----------------- ---- -------- ------ ------ ----------------- ----------
MyResourceGroup2 Demo westus Standard_DS1_v2 Windows Succeeded running
MyResourceGroup MyVM1 eastus Standard_DS1 Windows Succeeded running
MyResourceGroup MyVM2 eastus Standard_DS2_v2_Promo Windows Succeeded deallocated
You can find all your virtual machines under the current subscription via VirtualMachines
directory.
PS Azure:\MySubscriptionName\VirtualMachines> dir
# You will see output similar to the following:
Directory: Azure:\MySubscriptionName\VirtualMachines
Name ResourceGroupName Location VmSize OsType NIC ProvisioningState PowerState
---- ----------------- -------- ------ ------ --- ----------------- ----------
TestVm1 MyResourceGroup1 westus Standard_DS2_v2 Windows my2008r213 Succeeded stopped
TestVm2 MyResourceGroup1 westus Standard_DS1_v2 Windows jpstest Succeeded deallocated
TestVm10 MyResourceGroup2 eastus Standard_DS1_v2 Windows mytest Succeeded running
Warning
Please refer to Troubleshooting remote management of Azure VMs.
Assuming you have a VM, MyVM1, let's use Invoke-AzVMCommand to invoke a PowerShell script block on
the remote machine.
Enable-AzVMPSRemoting -Name MyVM1 -ResourceGroupname MyResourceGroup
Invoke-AzVMCommand -Name MyVM1 -ResourceGroupName MyResourceGroup -Scriptblock {Get-ComputerInfo} -Credential (Get-Credential)
You can also navigate to the VirtualMachines directory first and run Invoke-AzVMCommand as follows.
PS Azure:\> cd MySubscriptionName\ResourceGroups\MyResourceGroup\Microsoft.Compute\virtualMachines
PS Azure:\MySubscriptionName\ResourceGroups\MyResourceGroup\Microsoft.Compute\virtualMachines> Get-Item MyVM1 | Invoke-AzVMCommand -Scriptblock {Get-ComputerInfo} -Credential (Get-Credential)
# You will see output similar to the following:
PSComputerName : 65.52.28.207
RunspaceId : 2c2b60da-f9b9-4f42-a282-93316cb06fe1
WindowsBuildLabEx : 14393.1066.amd64fre.rs1_release_sec.170327-1835
WindowsCurrentVersion : 6.3
WindowsEditionId : ServerDatacenter
WindowsInstallationType : Server
WindowsInstallDateFromRegistry : 5/18/2017 11:26:08 PM
WindowsProductId : 00376-40000-00000-AA947
WindowsProductName : Windows Server 2016 Datacenter
WindowsRegisteredOrganization :
...
You can use Enter-AzVM to interactively log into a VM running in Azure.
Enter-AzVM -Name MyVM1 -ResourceGroupName MyResourceGroup -Credential (Get-Credential)
You can also navigate to the VirtualMachines directory first and run Enter-AzVM as follows:
Get-Item MyVM1 | Enter-AzVM -Credential (Get-Credential)
By entering into the WebApps directory, you can easily navigate your web apps resources
dir .\WebApps\
# You will see output similar to the following:
Directory: Azure:\MySubscriptionName\WebApps
Name State ResourceGroup EnabledHostNames Location
---- ----- ------------- ---------------- --------
mywebapp1 Stopped MyResourceGroup1 {mywebapp1.azurewebsites.net... West US
mywebapp2 Running MyResourceGroup2 {mywebapp2.azurewebsites.net... West Europe
mywebapp3 Running MyResourceGroup3 {mywebapp3.azurewebsites.net... South Central US
# You can use Azure cmdlets to Start/Stop your web apps
PS Azure:\MySubscriptionName\WebApps> Start-AzWebApp -Name mywebapp1 -ResourceGroupName MyResourceGroup1
# You will see output similar to the following:
Name State ResourceGroup EnabledHostNames Location
---- ----- ------------- ---------------- --------
mywebapp1 Running MyResourceGroup1 {mywebapp1.azurewebsites.net ... West US
# Refresh the current state with -Force
PS Azure:\MySubscriptionName\WebApps> dir -Force
# You will see output similar to the following:
Directory: Azure:\MySubscriptionName\WebApps
Name State ResourceGroup EnabledHostNames Location
---- ----- ------------- ---------------- --------
mywebapp1 Running MyResourceGroup1 {mywebapp1.azurewebsites.net... West US
mywebapp2 Running MyResourceGroup2 {mywebapp2.azurewebsites.net... West Europe
mywebapp3 Running MyResourceGroup3 {mywebapp3.azurewebsites.net... South Central US
To authenticate to servers or VMs using SSH, generate the public-private key pair in Cloud Shell and
publish the public key to authorized_keys on the remote machine, such as
/home/user/.ssh/authorized_keys.
Note
You can create SSH private-public keys using ssh-keygen and publish them to
$env:USERPROFILE\.ssh in Cloud Shell.
Follow instructions here to create a new VM configuration using Azure PowerShell cmdlets.
Before calling into New-AzVM to kick off the deployment, add SSH public key to the VM
configuration. The newly created VM will contain the public key in the ~\.ssh\authorized_keys
location, thereby enabling credential-free SSH session to the VM.
# Create VM config object - $vmConfig using instructions on linked page above
# Generate SSH keys in Cloud Shell
ssh-keygen -t rsa -b 2048 -f $HOME\.ssh\id_rsa
# Ensure VM config is updated with SSH keys
$sshPublicKey = Get-Content "$HOME\.ssh\id_rsa.pub"
Add-AzVMSshPublicKey -VM $vmConfig -KeyData $sshPublicKey -Path "/home/azureuser/.ssh/authorized_keys"
# Create a virtual machine
New-AzVM -ResourceGroupName <yourResourceGroup> -Location <vmLocation> -VM $vmConfig
# SSH to the VM
ssh azureuser@MyVM.Domain.Com
Under Azure drive, type Get-AzCommand to get context-specific Azure commands.
Alternatively, you can always use Get-Command *az* -Module Az.* to find out the available Azure
commands.
You can run Install-Module to install modules from the PowerShell Gallery.
Type Get-Help to get information about PowerShell in Azure Cloud Shell.
Get-Help
For a specific command, you can still do Get-Help followed by a cmdlet.
Get-Help Get-AzVM
You can create a script, say helloworld.ps1, and save it to your clouddrive to use it across
shell sessions.
cd $HOME\clouddrive
# Create a new file in clouddrive directory
New-Item helloworld.ps1
# Open the new file for editing
code .\helloworld.ps1
# Add the content, such as 'Hello World!'
.\helloworld.ps1
Hello World!
Next time when you use PowerShell in Cloud Shell, the helloworld.ps1 file will exist under the
$HOME\clouddrive directory that mounts your Azure Files share.
You can customize your PowerShell environment, by creating PowerShell profiles - profile.ps1 (or
Microsoft.PowerShell_profile.ps1). Save it under $profile.CurrentUserAllHosts (or
$profile.CurrentUserCurrentHost), so that it can be loaded in every PowerShell in Cloud Shell
session.
For how to create a profile, refer to About Profiles.
To clone a Git repo in Cloud Shell, you need to create a personal access token and use it as the username. Once you have your token, clone the repository as follows:
git clone https://<your-access-token>@github.com/username/repo.git
Type exit to terminate the session.
