Using Azure Storage Queues with PowerShell

This guide demonstrates how to manage Azure Storage Queues using Azure PowerShell. You'll learn how to create queues, add messages, retrieve messages, and delete messages.

Prerequisites

  • An Azure subscription.
  • An Azure Storage account.
  • Azure PowerShell installed and configured. You can install it via the PowerShell Gallery or use Azure Cloud Shell.

Connecting to Your Storage Account

First, you need to connect to your Azure subscription and then specify the context for your storage account. You can use your subscription credentials or a storage account access key.

Using Subscription Credentials

If you're logged into Azure PowerShell, you can set the context directly:


# Log in to your Azure account
Connect-AzAccount

# Set the context to your storage account
# Replace 'YourResourceGroupName' and 'YourStorageAccountName' with your actual values
Set-AzContext -SubscriptionId "YOUR_SUBSCRIPTION_ID"
$storageAccount = Get-AzStorageAccount -ResourceGroupName "YourResourceGroupName" -Name "YourStorageAccountName"
$ctx = $storageAccount.Context
                

Using Storage Account Access Key

Alternatively, you can use the storage account name and its access key:


$storageAccountName = "yourstorageaccountname"
$storageAccountKey = "YOUR_STORAGE_ACCOUNT_KEY" # Get this from the Azure portal or Get-AzStorageAccountKey
$ctx = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
                

Creating a Queue

You can create a new queue using the New-AzStorageQueue cmdlet:


# Replace 'myqueue' with your desired queue name
New-AzStorageQueue -Name "myqueue" -Context $ctx
                

Adding Messages to a Queue

To add a message, use the Set-AzStorageQueueContent cmdlet. This command adds a message to the specified queue.


# Replace 'myqueue' with your queue name and the message content
Set-AzStorageQueueContent -Queue "myqueue" -Message "Hello, Azure Storage Queues!" -Context $ctx
Set-AzStorageQueueContent -Queue "myqueue" -Message "Another message for processing." -Context $ctx
                

Retrieving Messages from a Queue

You can retrieve messages using Get-AzStorageQueueContent. By default, it retrieves one message. You can specify the number of messages to retrieve and how long the message should be invisible in the queue (visibility timeout).


# Get a single message
$message = Get-AzStorageQueueContent -Queue "myqueue" -Context $ctx

# Get up to 5 messages with a 30-second visibility timeout
$messages = Get-AzStorageQueueContent -Queue "myqueue" -DequeueCount 5 -VisibilityTimeout (New-TimeSpan -Seconds 30) -Context $ctx

if ($messages) {
    foreach ($msg in $messages) {
        Write-Host "Message ID: $($msg.Id)"
        Write-Host "Message Content: $($msg.Message)"
        Write-Host "--------------------"
    }
} else {
    Write-Host "No messages in the queue."
}
                

Deleting Messages from a Queue

After processing a message, you should delete it from the queue using Remove-AzStorageQueueContent. You'll need the message's pop receipt.


# Assuming $message is the variable holding the message retrieved earlier
if ($message) {
    Remove-AzStorageQueueContent -Queue "myqueue" -MessageId $message.Id -PopReceipt $message.PopReceipt -Context $ctx
    Write-Host "Message $($message.Id) deleted."
}

# To delete multiple messages retrieved in a batch
if ($messages) {
    foreach ($msg in $messages) {
        Remove-AzStorageQueueContent -Queue "myqueue" -MessageId $msg.Id -PopReceipt $msg.PopReceipt -Context $ctx
        Write-Host "Message $($msg.Id) deleted."
    }
}
                

Managing Queues

Listing Queues

To see all queues in your storage account:


Get-AzStorageQueue -Context $ctx
                

Getting Queue Properties

To get details about a specific queue:


Get-AzStorageQueue -Name "myqueue" -Context $ctx
                

Deleting a Queue

To remove a queue and all its messages:


# Use -Confirm:$false to skip the confirmation prompt
Remove-AzStorageQueue -Name "myqueue" -Context $ctx -Confirm:$false
                

Example Scenario: A Simple Worker Process

Here's a basic PowerShell script that acts like a worker, checking for messages, processing them (simulated here by just writing to the console), and then deleting them.

Tip: In a real-world scenario, you would typically run this script in a loop or as a scheduled task to continuously process messages. You might also want to implement error handling and retry mechanisms.

# --- Configuration ---
$storageAccountName = "yourstorageaccountname"
$storageAccountKey = "YOUR_STORAGE_ACCOUNT_KEY" # Or use Connect-AzAccount and Set-AzContext
$queueName = "myworkerqueue"
$visibilityTimeoutSeconds = 30
$loopIntervalSeconds = 5

# --- Create Context ---
$ctx = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey

Write-Host "Starting worker process for queue '$queueName'..."

# --- Main Processing Loop ---
while ($true) {
    Write-Host "Checking for messages..."
    $messages = Get-AzStorageQueueContent -Queue $queueName -DequeueCount 1 -VisibilityTimeout (New-TimeSpan -Seconds $visibilityTimeoutSeconds) -Context $ctx

    if ($messages) {
        foreach ($msg in $messages) {
            Write-Host "Processing message ID: $($msg.Id)"
            Write-Host "Message Content: $($msg.Message)"

            # --- Simulate Message Processing ---
            # In a real application, you would perform your work here.
            # For example, saving data, sending an email, calling an API, etc.
            Start-Sleep -Seconds 2 # Simulate work

            Write-Host "Finished processing message ID: $($msg.Id)"

            # --- Delete Message ---
            Remove-AzStorageQueueContent -Queue $queueName -MessageId $msg.Id -PopReceipt $msg.PopReceipt -Context $ctx
            Write-Host "Deleted message ID: $($msg.Id)"
        }
    } else {
        Write-Host "No messages found. Waiting for $($loopIntervalSeconds) seconds..."
    }

    Start-Sleep -Seconds $loopIntervalSeconds
}
                
Note: This script runs indefinitely. To stop it, press Ctrl+C in the PowerShell console.

Conclusion

Azure PowerShell provides a powerful and convenient way to interact with Azure Storage Queues. By leveraging cmdlets like New-AzStorageQueue, Set-AzStorageQueueContent, Get-AzStorageQueueContent, and Remove-AzStorageQueueContent, you can effectively manage your queue operations for various application needs.