Using PowerShell with Azure Cloud Shell
Tags: azureapril, azure, showdev, powershell
Published: 2019-04-27 02:17:46

---
title: Using PowerShell with Azure Cloud Shell
published: true
description: Azure Cloud Shell includes PowerShell along with Bash for managing your Azure resources. See how easy it is to use!
tags: azureapril, azure, showdev, powershell
series: 'Azure April'
cover_image: https://thepracticaldev.s3.amazonaws.com/i/pblyvmtj4y8bdqisyzey.jpeg
---

*We've selected our favorite tips and tricks created by [Michael Crump](https://twitter.com/mbcrump) as well as planned fresh technical content on Azure all April! Miss a day (or more)? [Catch up with the series](https://dev.to/t/azureapril/latest).*

**Don't have Azure?** [Grab a free subscription](https://azure.microsoft.com/en-us/free?&WT.mc_id=azureapril_devto-blog-cxa). 


Azure Cloud Shell includes two command line languages for you to use: PowerShell and Bash. Traditionally, Bash has been the preferred method within Cloud Shell due to the rich set of tools in Azure CLI. With the update of the Azure PowerShell tools, there is feature parity between the two options so let's take a look at PowerShell in Azure Cloud Shell.

### Accessing PowerShell in Azure Cloud Shell

To access PowerShell in Azure Cloud Shell, you have a few options.
1. You can type `pwsh` in the shell, and you'll be authenticated into an instance of Cloud Shell with PowerShell without leaving the current Cloud Shell session.
![Switching from Bash to PowerShell in Cloud Shell](https://thepracticaldev.s3.amazonaws.com/i/wzvhjas5qdj7q705w0ws.png)

2. Another option is to re-launch the Cloud Shell window by choosing **PowerShell** from the dropdown menu
![Choosing PowerShell from Dropdown](https://thepracticaldev.s3.amazonaws.com/i/j3te50b9hnz9ngewrf4u.png)

and choosing 'Confirm' to restart. This will reconnect your session to the current container using PowerShell.
![Restart Session with PowerShell](https://thepracticaldev.s3.amazonaws.com/i/e8fdkkoal2pyf2lzqpka.png)

Once you are authenticated, you'll be able to explore the resources available in Azure using PowerShell.

To verify the version of PowerShell you are running, type `$PSVersionTable`.

```PowerShell
PS Azure:\> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      6.2.0
PSEdition                      Core
GitCommitId                    6.2.0
OS                             Linux 4.15.0-1041-azure #45-Ubuntu SMP Fri Mar 15 14:41:00 UTC 2019
Platform                       Unix
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

```

Notice that the OS for the Cloud Shell instance is Linux. That is because cloud shell uses PowerShell Core inside of a Linux container. Many of the same tools you would use in PowerShell Core on your machine are available as you can see with all of the installed modules.

```PowerShell

PS Azure:\> Get-Module
ModuleType Version    Name                                ExportedCommands---------- -------    ----                                ----------------Script     1.5.1      Az.Accounts                         {Add-AzEnvironment, Clear-AzContext, Clear-AzDefault, Connect-AzAccount…}Script     1.8.0      Az.Compute                          {Add-AzContainerServiceAgentPoolProfile, Add-AzImageDataDisk, Add-AzVhd, Add-AzVMAdditi…
Script     1.7.0      Az.Network                          {Add-AzApplicationGatewayAuthenticationCertificate, Add-AzApplicationGatewayBackendAddr…
Script     1.3.1      Az.Resources                        {Add-AzADGroupMember, Export-AzResourceGroup, Get-AzADAppCredential, Get-AzADApplicatio…
Script     1.2.0      Az.Storage                          {Add-AzRmStorageContainerLegalHold, Add-AzStorageAccountManagementPolicyAction, Add-AzS…
Script     0.0.0.9    AzureAD.Standard.Preview            {Add-AzureADAdministrativeUnitMember, Add-AzureADApplicationOwner, Add-AzureADApplicati…
Script     0.9.3      AzurePSDrive
Manifest   6.1.0.0    Microsoft.PowerShell.Management     {Add-Content, Clear-Content, Clear-Item, Clear-ItemProperty…}
Manifest   6.1.0.0    Microsoft.PowerShell.Utility        {Add-Member, Add-Type, Clear-Variable, Compare-Object…}
Script     0.9.3      PSCloudShellUtility                 {Disable-AzVMPSRemoting, Dismount-CloudDrive, Enable-AzVMPSRemoting, Enter-AzVM…}
Script     2.0.0      PSReadLine                          {Get-PSReadLineKeyHandler, Get-PSReadLineOption, Remove-PSReadLineKeyHandler, Set-PSRea…
Binary     0.8.1      SHiPS

```

Also, you have built-in tools like the Azure PowerShell module for managing your resources in Azure. 

To view all the Azure PowerShell commands, type `Get-Command -Module AZ* | more`

```PowerShell
PS Azure:\> Get-Command -Module AZ* | more

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           Add-AdlAnalyticsDataSource                         1.0.0      Az.DataLakeAnalytics
Alias           Add-AdlAnalyticsFirewallRule                       1.0.0      Az.DataLakeAnalytics
Alias           Add-AdlStoreFirewallRule                           1.2.0      Az.DataLakeStore

```

What's great about this is that you don't have to worry about updating these tools; It's all done for you.

### Exploring Azure Drive

When you log into Cloud Shell, you'll have access to Azure Drive. Azure Drive gives you file system-like access to all your tenant resources. It does this by building a PowerShell Drive, based on SHiPS (Simple Hierarchy in PowerShell). So you can do a directory listing and see all of your subscriptions like this:

```PowerShell
Azure:/
PS Azure:\> dir

    Directory: Azure:

Mode SubscriptionName                     SubscriptionId                       TenantId                             State
---- ----------------                     --------------                       --------                             -----
+    ca-mibender-demo-test                xxxx-xxxx-xxxx-xxxx-xxxx xxxx-xxxx-xxxx-xxxx-xxxx  Enabled

```

Then drill down into the directories to view resources deployed in Azure like Virtual Machines by using cd 

```PowerShell

Azure:/
PS Azure:\> cd ./ca-mibender-demo-test/VirtualMachines/
Azure:/ca-mibender-demo-test/VirtualMachines
PS Azure:\> dir
    Directory: Azure:/ca-mibender-demo-test/VirtualMachinesName              ResourceGroupName   Location          VmSize  OsType            NIC ProvisioningState  PowerState
----              -----------------   --------          ------  ------            --- -----------------  ----------
myVM        CLOUDSHELL-DEMO-MICHAEL westeurope     Standard_A1   Linux       myVM-nic         Succeeded     running
vm-linux-01   AZURE-CLOUDSHELL-DEMO    westus2 Standard_DS1_v2   Linux vm-linux-01336         Succeeded deallocated
vm-linux-02   AZURE-CLOUDSHELL-DEMO    westus2 Standard_DS1_v2   Linux vm-linux-02181         Succeeded     running
vm-win-01     AZURE-CLOUDSHELL-DEMO    westus2 Standard_DS1_v2 Windows   vm-win-01543         Succeeded     running
vm-win-02     AZURE-CLOUDSHELL-DEMO    westus2 Standard_DS1_v2 Windows   vm-win-02953         Succeeded     running

```

Now if you want to see the properties of a VM, let's say vm-linux-01, you can use the `Get-AzVm` command for that

```PowerShell
PS Azure:\> get-AzVm -Name vm-linux-01 

ResourceGroupName            Name Location          VmSize OsType            NIC ProvisioningState Zone
-----------------            ---- --------          ------ ------            --- ----------------- ----
AZURE-CLOUDSHELL-DEMO vm-linux-01  westus2 Standard_DS1_v2  Linux vm-linux-01336         Succeeded

```

### Accessing Azure Cloud Drive

Another feature of Cloud Shell is CloudDrive. CloudDrive is a 5GB Azure File Share that provides [persistent storage to your Cloud Shell instance](https://docs.microsoft.com/en-us/azure/cloud-shell/persisting-shell-storage?WT.mc_id=azureapril_devto-blog-cxa). This allows you to store scripts, install tooling, and other file-management tasks, and have all of this available every time you access Cloud Shell.

To get to your Cloud Drive, type in `cd $Home` to access the home drive where Cloud Drive resides. Then type  `cd ./CloudDrive` to enter your persistent CloudDrive storage.

```PowerShell
PS Azure:\> cd $home
PS /home/michael> dir

    Directory: /home/michael

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d----l           4/25/19  1:24 PM                clouddrive

PS /home/michael> cd ./clouddrive/
PS /home/michael/clouddrive> dir

    Directory: /home/michael/clouddrive

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----           4/15/19  2:13 PM                DemoDirectory
d-----           4/11/19  9:50 PM                scripts

PS /home/michael/clouddrive>
```
And if you are still not sold on using PowerShell, you can still run your Bash, and Azure CLI commands in the PowerShell console. It supports both!

```PowerShell

PS Azure:\> az group create --name myResourceGroup --location eastus
{
  "id": "/subscriptions/XXXX-XXXX-XXXX-XXXX/resourceGroups/myResourceGroup",
  "location": "eastus",
  "managedBy": null,
  "name": "myResourceGroup",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": null
}

```

That will get you started using PowerShell in Azure Cloud Shell! 


Want more PowerShell in Azure Cloud Shell? Check out our [quickstarts and tutorials](https://docs.microsoft.com/en-us/azure/cloud-shell/quickstart-powershell?WT.mc_id=azureapril_devto-blog-cxa)!

---
We'll be posting articles every day in April, so stay tuned or jump ahead and check out more tips and tricks [now](http://azuredev.tips).