Opsgility Cloud Readiness Blog

The cloud moves fast! Keep up with the latest products, trends and more with Opsgility's industry experts and cloud-pros.

Windows Azure PowerShell Cmdlets 2.2.2 Release

Posted on: March 12, 2012 by Michael Washam

Windows Azure PowerShell Cmdlets (v2.2.2)

We have a brand new release of the Windows Azure PowerShell cmdlets that we hope
will make getting started and scripting with the cmdlets a much easier task.

The new release can be downloaded from its CodePlex project site 

Getting Started Improvements

In 2.2.2 we have added a start menu link that starts a PowerShell session with
the Windows Azure cmdlets already loaded. We have also added a Start Here link
that shows how to complete the setup and a short tour about the capabilities of
the Windows Azure PowerShell cmdlets and release changes.

Subscription Management Improvements

We have taken the
subscription management improvements from the 2.2 release and made them much
Specifically, we have added the ability to persist your subscription settings
into your user profile. This functionality allows you to set the subscription
data once and then in new scripts or PowerShell sessions just select the
subscription you want to use without the need to specify the subscription ID,
Certificate and storage accounts each time.

Code Snippet One: Setting Subscription Data

      $subid = "{subscription id}"
     $cert = Get-Item cert:CurrentUserMyCERTTHUMBPRINTUPPERCASE
     # Persisting Subscription Setings
     Set-Subscription -SubscriptionName org-sub1 -Certificate $cert -SubscriptionId $subid
     # Setting the current subscription to use 
     Select-Subscription -SubscriptionName org-sub1

Calling the Set-Subscription cmdlet with your certificate
and subscription ID. Set-Subscription will persist the certificate thumbprint
and subscription id to (C:Users{username}AppDataRoamingWindows Azure
PowerShell CmdletsDefaultSubscriptionData.xml) associated with the subscription name.

This functionality supports adding multiple subscriptions to your configuration
so you can manage each individually within the same script simply by calling
Select-Subscription with the subscription name.

Code Snippet Two: Setting the Default Subscription

        Set-Subscription -DefaultSubscription org-sub1

Snippet two demonstrates setting the default subscription to use if you do not set one with Select-Subscription.

Code Snippet Three: Associating Storage Accounts with your Subscription

     # Save the cert and subscriptio id for two subscriptions
     Set-Subscription -SubscriptionName org-sub1 -StorageAccountName mystoragename1 -StorageAccountKey mystoragekey1
     Set-Subscription -SubscriptionName org-sub1 -StorageAccountName mystoragename2 -StorageAccountKey mystoragekey2
     # Specify the default storage account to use for the subscription
     Set-Subscription -SubscriptionName org-sub1 -DefaultStorageAccount mystoragename1

Snippet three shows that you can associate multiple storage accounts with a single subscription. All it takes to use the correct storage account is to set the default before calling a cmdlet that requires a storage account.

Code Snippet Four: Specifying the Subscription Data File Location

       # Overriding the default location to save subscription settings
       Set-Subscription -SubscriptionName org-sub1 -Certificate $cert -SubscriptionId $subid -SubscriptionDataFile c:mysubs.xml
       # Retrieving a list of subscriptions from an alternate location
       Get-Subscription -SubscriptionDataFile c:mysubs.xml

Each of th subscription cmdlets take a -SubscriptionDataFile parameter that allows you to specify which XML file to use for operations.

Code Snippet Five: MISC Subscription Management

        # Returns all persisted settings 
       # Removes mysub2 from persisted settings
       Remove-Subscription -SubscriptionName org-sub2
       # Removing a storage account from your persisted subscription settings
       Set-Subscription -SubscriptionName org-sub1 -RemoveStorageAccount mystoragename1

Other Usability Improvements

We have made many of the cmdlets simpler to use by allowing more parameters to
be optional with default values.

  • -Label parameter is now optional in New-AffinityGroup, Set-AffinityGroup, New-HostedService, New-StorageAccount, New-Deployment and Update-Deployment.
  • -Slot parameter is now optional in New-Deployment and Update-Deployment (Production slot is used by default).
  • -Name parameter is now optional in New-Deployment (a Globally Unique Identifier value is used by default).

In addition to the defaults we provided some needed fixes to unblock certain scenarios.

  • Get-Deployment now returns $null if no deployment was found in the specified slot (an error was thrown in previous versions).
  • -Package and -Configuration parameters now accept UNC paths in New-Deployment and Update-Deployment.

Breaking Changes

With improvements like these we did have to make some sacrifices.
Before you download the latest build please review the list below because we have a few breaking changes.

  • -DefaultStorageAccountName and -DefaultStorageAccountKey parameters were removed from Set-Subscription. Instead, when adding multiple accounts to a subscription, each one needs to be added with -StorageAccountName and -StorageAccountKey or -ConnectionString. To set a default storage account, use Set-Subscription –DefaultStorageAccount {account name}.
  • -SubscriptionName is now mandatory in Set-Subscription.
  • In previous releases, the subscription data was not persisted between PowerShell sessions. When importing subscription settings from a publishsettings file downloaded from the management portal, the Import-Subscription cmdlet optionally saved the subscription information to a file that could then be restored using Set-Subscription thereafter. This behavior has changed. Now, imported subscription data is always persisted to the subscription data file and is immediately available in subsequent sessions. Set-Subscription can be used to update these subscription settings or to create additional subscription data sets.
  • Renamed -CertificateToDeploy parameter to -CertToDeploy in Add-Certificate.
  • Renamed -ServiceName parameter to -StorageAccountName in all Storage Service cmdlets (added “ServiceName” as a parameter alias for backward compatibility).


In the 2.2.2 release we have made a number of fixes such as accepting UNC paths and fixing Get-Deployment to not throw an error on empty slots. We have also substantially improved the getting started experience and how you can manage your Windows Azure subscriptions from PowerShell.

The new release can be downloaded from http://wappowershell.codeplex.com.

One thought on “Windows Azure PowerShell Cmdlets 2.2.2 Release

  1. Michael Washam

    A colleague of mine (Dennis Mulder) found that 2.2.2 needs to have the https endpoints set for Windows Azure Diagnostics to continue working correctly when configured through PowerShell.

    If not you will get this error:
    Get-DiagnosticAwareRoles : Endpoint http://XXXXXXXX.blob.core.windows.net/ is not a secure connection.

    The workaround is to set secure endpoints for the subscription settings you are using to configure diagnostics:

    Set-Subscription -SubscriptionName diagSettings -StorageAccountKey $storageAccountKey -StorageAccountName $storageAccountName -BlobStorageEndpoint “https://{storageName}.blob.core.windows.net” -QueueStorageEndpoint “https://{storageName}.queue.core.windows.net” -TableStorageEndpoint “https:// {storageName}.table.core.windows.net”


leave a reply

Connect with Opsgility