This post covers using the Azure REST API in PowerShell.
First of you need to install the latest and greatest Azure PowerShell Module on your machine. Best place to do this is to install the good old fashioned MSI available from https://github.com/Azure/azure-powershell/releases
Once you have the latest Azure PowerShell Module on your machine, you’ll need to restart.
For the remainder of this post we will be focusing on the Rest API for Azure, the reference for the Azure Classic Rest API is here and the Rest API reference for Azure ARM is here.
The script below will have you Logon to (new) Azure from PowerShell only. Then the script can handle two separate Rest API calls:
- Rest API call against Azure Classic
- Rest API call against Azure ARM
The function for the Rest API auth will handle both Classic & ARM. Feel free to use the script below as a start to test yourself, it doesn’t change anything and only does a ‘GET’ for information.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Logon to Azure ARM | |
$Azure = Get-AzureRmEnvironment 'AzureCloud' | |
$Env = Login–AzureRmAccount –Environment $Azure –Verbose | |
# Select Subscription | |
Select-AzureRmProfile –Profile $Env | |
$Subscription = (Get-AzureRmSubscription | Out-GridView –Title "Choose a Source Subscription …" –PassThru) | |
# Select Subscription Function | |
Function Subscription { | |
Select-AzureRmProfile –Profile $Env | |
Get-AzureRmSubscription –SubscriptionName $Subscription.SubscriptionName | Select-AzureRmSubscription | |
} | |
Function RESTAPI-Auth { | |
# Load ADAL Azure AD Authentication Library Assemblies | |
Subscription | |
$adal = "${env:ProgramFiles(x86)}\Microsoft SDKs\Azure\PowerShell\ServiceManagement\Azure\Services\Microsoft.IdentityModel.Clients.ActiveDirectory.dll" | |
$adalforms = "${env:ProgramFiles(x86)}\Microsoft SDKs\Azure\PowerShell\ServiceManagement\Azure\Services\Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll" | |
$null = [System.Reflection.Assembly]::LoadFrom($adal) | |
$null = [System.Reflection.Assembly]::LoadFrom($adalforms) | |
$adTenant = $Subscription.TenantId | |
$global:SubscriptionID = $Subscription.SubscriptionId | |
# Client ID for Azure PowerShell | |
$clientId = "1950a258-227b-4e31-a9cf-717495945fc2" | |
# Set redirect URI for Azure PowerShell | |
$redirectUri = "urn:ietf:wg:oauth:2.0:oob" | |
# Set Resource URI to Azure Service Management API | @marckean | |
$resourceAppIdURIASM = "https://management.core.windows.net/" | |
$resourceAppIdURIARM = "https://management.azure.com/" | |
# Authenticate and Acquire Token | |
# Set Authority to Azure AD Tenant | |
$authority = "https://login.windows.net/$adTenant" | |
# Create Authentication Context tied to Azure AD Tenant | |
$authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" –ArgumentList $authority | |
# Acquire token | |
$global:authResultASM = $authContext.AcquireToken($resourceAppIdURIASM, $clientId, $redirectUri, "Auto") | |
$global:authResultARM = $authContext.AcquireToken($resourceAppIdURIARM, $clientId, $redirectUri, "Auto") | |
} | |
Function ASM-StorageAPI ($SourceStorageAccountName) { # to get the source storage key | |
# Create Authorization Header | |
$authHeader = $global:authResultASM.CreateAuthorizationHeader() | |
# Set HTTP request headers to include Authorization header | @marckean | |
$requestHeader = @{ | |
"x-ms-version" = "2014-10-01"; #'2014-10-01' | |
"Authorization" = $authHeader | |
} | |
$Uri = "https://management.core.windows.net/$SubscriptionID/services/storageservices/{0}/keys" -f $SourceStorageAccountName | |
$Global:SourceKey = Invoke-RestMethod –Method Get –Headers $requestheader –Uri $Uri | | |
select –ExpandProperty StorageService | select –ExpandProperty StorageServiceKeys | select –ExpandProperty primary | |
} | |
Function ARM-VMInfoAPI ($VMName, $RGName) { # to get the source storage key | |
# Create Authorization Header | |
$authHeader = $global:authResultARM.CreateAuthorizationHeader() | |
# Set HTTP request headers to include Authorization header | @marckean | |
$requestHeader = @{ | |
"x-ms-version" = "2014-10-01"; #'2014-10-01' | |
"Authorization" = $authHeader | |
} | |
$Uri = "https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/virtualMachines/{2}?api-version={3}" ` | |
-f $SubscriptionID, $RGName, $VMName, '2015-06-15' | |
$Global:VMInfo = Invoke-RestMethod –Method Get –Headers $requestheader –Uri $uri | |
} | |
# Call the functions above | |
Subscription | |
RESTAPI–Auth # To Logon to Rest and get an an auth key | |
########################################################################################## | |
####################### Rest API against Azure Classic ########################## | |
########################################################################################## | |
# Run Rest API call to get the Storage Key – only works for Classic Storage Accounts | |
ASM–StorageAPI (Get-AzureRmResource | ? {$_.ResourceType -match 'ClassicStorage/storageAccounts'})[0].Name | |
# Display the Results | |
$Global:SourceKey | |
########################################################################################## | |
########################## Rest API against Azure ARM ########################### | |
########################################################################################## | |
# Run Rest API call to get the Storage Key | |
$Name = (Get-AzureRmResource | ? {$_.ResourceType -match 'Microsoft.Compute/virtualMachines'})[0].Name | |
$ResourceGroupName = (Get-AzureRmResource | ? {$_.ResourceType -match 'Microsoft.Compute/virtualMachines'})[0].ResourceGroupName | |
ARM–VMInfoAPI $Name $ResourceGroupName | |
# Display the Results | |
$Global:VMInfo |
By the way, if you want to run something similar in the Chrome plugin Postman, this article walks you through it.
To get the Authorisation code in the Article, from the PowerShell above, the following will give you what you need and send it direct to the clipboard
$global:authResultASM.CreateAuthorizationHeader() | scb $global:authResultARM.CreateAuthorizationHeader() | scb
This is what the top of Postman should look like: