Today I am going to show you how to upload files to Azure Storage using the Azure Resource Manager PowerShell cmdlets. We are going to  upload all of our resources to the resource group and storage account that we created in this previous post. Once you have built your ARM template, VHD or DSC Configuration you can use the script below to upload the files to Azure storage. This scripts uploads files as a block blob type, you can read more about Azure Storage types here. I will cover this a bit more in a future blog post where I will show you how to upload a custom VHD to Azure, for now just note that you should not use the script below as is to upload a VHD.

If($cred -eq $null)
$cred = Get-Credential
$Account = Add-AzureAccount -Credential $Cred

Switch-AzureMode AzureResourceManager
$ResourceGroupName = 'Template'
$location = 'Central US'
$StorageAccountName = '<mystorageaccountname>'
$StorageType = 'Standard_LRS'
$storageContainer = '<Containername>'
$File = '<Enter the path here>'
$StorageAccountName = $StorageAccountName.ToLower()
$storageContainer = $storageContainer.ToLower()

$storageKey = Get-AzureStorageAccountKey -ResourceGroupName $ResourceGroupName -AccountName $StorageAccountName
$StorageContext = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $storageKey.Key1
Set-AzureStorageBlobContent -File $File -Context $StorageContext -Container $storageContainer -BlobType Block

Deploying Azure Resources with Azure Automation Blog Series




Today I am going to use the Azure PowerShell Module to create a new Azure Resource Manager storage account and 3 containers to store different resources that we will need throughout this blog series. The first container we are going to name vhdimages, we will store custom VHD images here, the second container is named armtemplates, we will store our json/Arm templates here and the last container is named configurations we will store a DSC configurations hear.  Optionally you could store everything in a single container but I have chosen to create separate containers for organizational purposes

If you have not used the Azure PowerShell Module yet you can download it here.  If you are reading this before October 2015 I recommend that you take a look at this Wiki article Deprecation of Switch Azure Mode in Azure PowerShell to understand some of the upcoming changes to the Azure PowerShell module. I plan to update all of these scripts to use the late September release of the module once it is release. Need to know how to connect to Azure with PowerShell check out this blog post.

There are a few rules to know while working with azure storage accounts, each storage account in azure must have a unique name, so it may take a few attempts to find a name that is not already in use by another azure user. Storage accounts and container also can only contain lowercase characters or number.

Switch-AzureMode AzureResourceManager

$ResourceGroupName = 'Templates'
$location = 'Central US'
$StorageAccountName = 'mystorageaccountname'
$StorageType = 'Standard_LRS'
$storageContainerVHD = 'VHDImages'
$storageContainerARM = 'Armtemplates'
$storageContainerDSC = 'Configurations'
$StorageAccountName = $StorageAccountName.ToLower()
$storageContainerVHD = $storageContainerVHD.tolower()
$storageContainerARM = $storageContainerARM.tolower()
$storageContainerDSC = $storageContainerDSC.tolower()
New-AzureResourceGroup -Name $ResourceGroupName -Location $location
New-AzureStorageAccount -ResourceGroupName $ResourceGroupName -AccountName $StorageAccountName -Type $StorageType -Location $location
$storageKey = Get-AzureStorageAccountKey -ResourceGroupName $ResourceGroupName -AccountName $StorageAccountName
$StorageContext = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $storageKey.Key1
New-AzureStorageContainer -Context $StorageContext -Name $storageContainerVHD -Permission Off
New-AzureStorageContainer -Context $StorageContext -Name $storageContainerARM -Permission Off
New-AzureStorageContainer -Context $StorageContext -Name $storageContainerDSC -Permission Off

Deploying Azure Resources with Azure Automation Blog Series

Today I am going to show you how to connect to Azure with the PowerShell Module. There are a few things that you should have in place before trying to connect. You will need to have an Azure Subscription and I recommend setting up Azure AD. I am not going to cover how to get Azure AD setup in this series, there are many blog post out there already on how to setup Azure AD Connect and ADFS.

What Credential should you use to connect to Azure, my recommendation is that you use an organization account that you have granted access to your Azure subscription. You have the option to use an Azure AD account also but if you have signed up to azure with a personal or gmail address you will not be able to authenticate to Azure with that account using the scripts below.  You will get this error

Add-AzureAccount : -Credential parameter can only be used with Organization ID


If you are running the Azure PowerShell module from your desktop you can use the following 3 lines to get connected to Azure.

$Cred = Get-Credential 
$Account = Add-AzureAccount -Credential $Cred
Select-AzureSubscription -SubscriptionId '<GUID>' 

If you are running the Azure PowerShell module from Azure Automation you can use this workflow as a template.

workflow ConnectToAzure
    #The name of the Automation Credential Asset this runbook will use to authenticate to Azure.
    $CredentialAssetName = 'DefaultAzureCredential'

    #Get the credential with the above name from the Automation Asset store
    $Cred = Get-AutomationPSCredential -Name $CredentialAssetName
    if(!$Cred) {
        Throw "Could not find an Automation Credential Asset named '${CredentialAssetName}'. Make sure you have created one in this Automation Account."

    #Connect to your Azure Account
    $Account = Add-AzureAccount -Credential $Cred
    if(!$Account) {
        Throw "Could not authenticate to Azure using the credential asset '${CredentialAssetName}'. Make sure the user name and password are correct."

    Select-AzureSubscription -SubscriptionID '<Guid>'

To use the above workflow you will need to create an credential asset in Azure Automation, I will cover this more in one of the Azure Automation blog post.

Deploying Azure Resources with Azure Automation Blog Series

I’ve decided to produce a single list of community based runbooks I have found useful. I will update this post as I find more.

Start Azure Automation Child Runbook

Send Email from Azure Automation from a Visual Studio Online Service Hook

New Service Request from Template


It has been awhile since I have blogged, and it is time to change that and share what I have been working on recently.

In this blog series I am going to walk you through how to deploy VMs in Azure using your own customized image using Azure Automation. To get started if you don’t already have an azure subscription you can sign up for one here.  We are going to cover a lot of different technologies/topics in this series so I plan to use this Intro blog post as an index for the series and a mast list of resources. As I find new resources for Azure I plan to update this post.

We will be using the Azure Resource Manager API in all of the blog post unless stated otherwise. (links to post will be updated as I post them)

  • Connecting to Azure with Azure PowerShell Module
  • ARM: Create Storage account with Azure PowerShell Module
  • ARM: Upload resources to Azure Storage
  • ARM: Create Azure Automation Account
  • ARM: IaaS Automation Setup Script
  • ARM: Uploading ARM PowerShell Module to Azure Automation
  • ARM: New-ARMDeployment Runbook
  • ARM: Json Templates
    • ARM Templates – Visual Studio overview
    • ARM Template – Standard Windows VM from Azure gallery
    • ARM Template – Domain Join
    • ARM Template – Custom image
    • ARM Template – Multiple VMs in Single deployment
  • ARM: Uploading ARM Templates to Azure Storage
  • ARM: Preparing VM Image to upload
    • ARM: Prepare RHEL Image for Azure
  • ARM: Upload VHD Images to Azure Storage
  • ARM: Deploy-VM Runbook
  • ARM: Invoke Runbook via Webhooks
  • ARM: Invoke Runbook from Service Manager
  • ARM: Link VM to Azure Automation DSC Configuration

Azure Resources

Azure Blogs

While you’re waiting for the next blog post check out my Azure DSC blogs

  1. Enable Azure Automation DSC Preview
  2. Register Servers to Azure Automation DSC
  3. Azure Automation DSC – Uploading Configurations
  4. Azure Automation DSC – Linking a Node to Node Configuration