Bug: "Your Azure credentials have not been set up or have expired, please run Add-AzureAccount to set up your Azure credentials."

I wanted to automate dev/test environments lately in Azure and I faced the following issue...

Azure PowerShell cmdlets introduced in version 0.8.15 AzureProfile support:


AzureProfile:
New cmdlets to manage in-memory profiles

  • New-AzureProfile: Create a new in-memory Profile
  • Select-AzureProfile: Select the profile to be used in the current session

Added -Profile parameter to every cmdlet - the cmdlet will use the passed-in profile to authenticate with Azure


But I cannot get that to work like in this example, if I execute this script in a new PowerShell session, with valid credential, it fails the first time it run.

if(!$global:issueAzureCred) {  
    $global:issueAzureCred = Get-Credential
}

Import-Module Azure

Clear-AzureProfile -Force  
$random = Get-Random -Maximum 99999
$storageAccount = 'devtestpowershell{0}' -f $random
$subscriptionId = '{SubscriptionIdHere}'

$azureProfile = New-AzureProfile -SubscriptionId $subscriptionId -StorageAccount $storageAccount -Credential $global:issueAzureCred
Select-AzureProfile -Profile $azureProfile  
New-AzureStorageAccount -StorageAccountName $storageAccount -Type Standard_LRS -Location 'East US 2' -Profile $azureProfile  

Error:

New-AzureStorageAccount : Your Azure credentials have not been set up or have expired, please run Add-AzureAccount to set up your Azure credentials.
At C:\Users\someuser\Desktop\Add-AzureAccountIssue.ps1:15 char:1

New-AzureStorageAccount -StorageAccountName $storageAccount -Type Sta ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CategoryInfo : NotSpecified: (:) [New-AzureStorageAccount], ArgumentException
FullyQualifiedErrorId : System.ArgumentException,Microsoft.WindowsAzure.Commands.ServiceManagement.StorageServices.NewAzureStorageAccountCommand

Impacted versions

I tested the script on these version and always got the same behavior

  • 0.8.15.1
  • 0.8.16.0
  • 0.9.0

Workaround

if you perform the New-AzureProfile and Select-AzureProfile statements back to back it will solve the problem...

$azureProfile = New-AzureProfile -SubscriptionId $subscriptionId -StorageAccount $storageAccount -Credential $global:issueAzureCred
Select-AzureProfile -Profile $azureProfile

$azureProfile = New-AzureProfile -SubscriptionId $subscriptionId -StorageAccount $storageAccount -Credential $global:issueAzureCred
Select-AzureProfile -Profile $azureProfile

Get-AzureVMImage  

OR you can still use Select-AzureSubscription with Add-AzureAccount or Management certificates with Import-AzurePublishSettingsFile

I opened an issue on GitHub about this.

I am the proud father of two little gems. A beer & wine enthusiasm. For everything else, I work and play with Azure at day, and I am an Azure MVP & Advisor at night.
Montreal, Canada