Azure PowerShell - 如果不存在,如何创建队列
Azure PowerShell - How to Create Queue If Not Exists
我正在使用 Azure PowerShell 创建条目并将其添加到 Azure 队列,下面是示例:MSDN: Using Azure PowerShell with Azure Storage - How to manage Azure queues .
这是我的 PowerShell 脚本:
$storeAuthContext = New-AzureStorageContext -StorageAccountName '[my storage account name]' -StorageAccountKey '[my storage account key'
$myQueue = New-AzureStorageQueue –Name 'myqueue' -Context $storeAuthContext
$queueMessage = New-Object -TypeName Microsoft.WindowsAzure.Storage.Queue.CloudQueueMessage -ArgumentList 'Hello'
$myQueue.CloudQueue.AddMessage($queueMessage)
第一次使用时效果很好 运行。
第二次,我明白了:
New-AzureStorageQueue : Queue 'myqueue' already exists. At line:1
char:12
+ $myQueue = New-AzureStorageQueue –Name 'myqueue' -Context $storeAuthContext
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ResourceExists: (:) [New-AzureStorageQueue], ResourceAlreadyExistException
+ FullyQualifiedErrorId : ResourceAlreadyExistException,Microsoft.WindowsAzure.Commands.Storage.Queue.NewAzureStorageQueueCommand
在 .NET Azure 存储 API 中有 cloudqueue.createifnotexists (MSDN),但我在 Azure PowerShell 中找不到等效项。
如果 Azure 存储队列不存在,PowerShell 中创建 Azure 存储队列的最佳方法是什么?否则获取对现有队列的引用?
据我所知,PowerShell 模块中没有 CreateIfNotExist 标志。
您可以轻松地执行以下操作来实现相同的目的:
$queue = Get-AzureStorageQueue -name 'myName' -Context $storeAuthContext
if(-not $queue){
# your code to create the queue
}
如果你想抑制错误并总是尝试创建它(不管它是否存在);创建队列时,您应该能够使用 -ErrorAction SilentlyContinue。
我会推荐第一种方法,因为它是一种更好的做法。
截至 2017.03.14,已接受的答案在 Powershell Azure 函数中不起作用,如果指定队列不存在,Get-AzureStorageQueue
将引发异常。
示例:
这是代码
$storageAccountName = $env:AzureStorageAccountName
Write-Output ("storageAccountName: {0}" -f $storageAccountName)
$storageAccountKey = $env:AzureStorageAccountKey
Write-Output ("storageAccountKey: {0}" -f $storageAccountKey)
$storageQueueName = $env:AzureStorageQueueName
Write-Output ("storageAccountKey: {0}" -f $storageAccountKey)
Write-Output "Creating storage context"
$azureStorageContext = New-AzureStorageContext $storageAccountName - StorageAccountKey $storageAccountKey
Write-Output "Retrieving queue"
$azureStorageQueue = Get-AzureStorageQueue -Name $storageQueueName –Context $azureStorageContext
这是日志
2017-03-15T04:16:57.021 Get-AzureStorageQueue : Can not find queue 'my-queue-name'.
at run.ps1: line 21
+ Get-AzureStorageQueue
+ _____________________
+ CategoryInfo : ObjectNotFound: (:) [Get-AzureStorageQueue], ResourceNotFoundException
+ FullyQualifiedErrorId : ResourceNotFoundException,Microsoft.WindowsAzure.Commands.Storage.Queue.GetAzureStorageQueueCommand
2017-03-15T04:16:57.021 Function completed (Failure, Id=58f35998-ebe0-4820-ac88-7d6ca42833df)
分辨率
我必须过滤结果并且只在队列不存在时才创建队列。解决方法如下:
Write-Output "Retrieving queue"
# Get-AzureStorageQueue returns an exception if the queue does not exists when passing -Name, so instead
# we need to get them all, filter by Name, and if null, create it
$azureStorageQueue = Get-AzureStorageQueue –Context $azureStorageContext | Where-Object {$_.Name -eq $storageQueueName}
if ($azureStorageQueue -eq $null)
{
Write-Output "Queue does not exist, creating it"
$azureStorageQueue = New-AzureStorageQueue -Name $storageQueueName -Context $azureStorageContext
}
我正在使用 Azure PowerShell 创建条目并将其添加到 Azure 队列,下面是示例:MSDN: Using Azure PowerShell with Azure Storage - How to manage Azure queues .
这是我的 PowerShell 脚本:
$storeAuthContext = New-AzureStorageContext -StorageAccountName '[my storage account name]' -StorageAccountKey '[my storage account key'
$myQueue = New-AzureStorageQueue –Name 'myqueue' -Context $storeAuthContext
$queueMessage = New-Object -TypeName Microsoft.WindowsAzure.Storage.Queue.CloudQueueMessage -ArgumentList 'Hello'
$myQueue.CloudQueue.AddMessage($queueMessage)
第一次使用时效果很好 运行。
第二次,我明白了:
New-AzureStorageQueue : Queue 'myqueue' already exists. At line:1 char:12 + $myQueue = New-AzureStorageQueue –Name 'myqueue' -Context $storeAuthContext + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ResourceExists: (:) [New-AzureStorageQueue], ResourceAlreadyExistException + FullyQualifiedErrorId : ResourceAlreadyExistException,Microsoft.WindowsAzure.Commands.Storage.Queue.NewAzureStorageQueueCommand
在 .NET Azure 存储 API 中有 cloudqueue.createifnotexists (MSDN),但我在 Azure PowerShell 中找不到等效项。
如果 Azure 存储队列不存在,PowerShell 中创建 Azure 存储队列的最佳方法是什么?否则获取对现有队列的引用?
据我所知,PowerShell 模块中没有 CreateIfNotExist 标志。
您可以轻松地执行以下操作来实现相同的目的:
$queue = Get-AzureStorageQueue -name 'myName' -Context $storeAuthContext
if(-not $queue){
# your code to create the queue
}
如果你想抑制错误并总是尝试创建它(不管它是否存在);创建队列时,您应该能够使用 -ErrorAction SilentlyContinue。
我会推荐第一种方法,因为它是一种更好的做法。
截至 2017.03.14,已接受的答案在 Powershell Azure 函数中不起作用,如果指定队列不存在,Get-AzureStorageQueue
将引发异常。
示例:
这是代码
$storageAccountName = $env:AzureStorageAccountName
Write-Output ("storageAccountName: {0}" -f $storageAccountName)
$storageAccountKey = $env:AzureStorageAccountKey
Write-Output ("storageAccountKey: {0}" -f $storageAccountKey)
$storageQueueName = $env:AzureStorageQueueName
Write-Output ("storageAccountKey: {0}" -f $storageAccountKey)
Write-Output "Creating storage context"
$azureStorageContext = New-AzureStorageContext $storageAccountName - StorageAccountKey $storageAccountKey
Write-Output "Retrieving queue"
$azureStorageQueue = Get-AzureStorageQueue -Name $storageQueueName –Context $azureStorageContext
这是日志
2017-03-15T04:16:57.021 Get-AzureStorageQueue : Can not find queue 'my-queue-name'.
at run.ps1: line 21
+ Get-AzureStorageQueue
+ _____________________
+ CategoryInfo : ObjectNotFound: (:) [Get-AzureStorageQueue], ResourceNotFoundException
+ FullyQualifiedErrorId : ResourceNotFoundException,Microsoft.WindowsAzure.Commands.Storage.Queue.GetAzureStorageQueueCommand
2017-03-15T04:16:57.021 Function completed (Failure, Id=58f35998-ebe0-4820-ac88-7d6ca42833df)
分辨率
我必须过滤结果并且只在队列不存在时才创建队列。解决方法如下:
Write-Output "Retrieving queue"
# Get-AzureStorageQueue returns an exception if the queue does not exists when passing -Name, so instead
# we need to get them all, filter by Name, and if null, create it
$azureStorageQueue = Get-AzureStorageQueue –Context $azureStorageContext | Where-Object {$_.Name -eq $storageQueueName}
if ($azureStorageQueue -eq $null)
{
Write-Output "Queue does not exist, creating it"
$azureStorageQueue = New-AzureStorageQueue -Name $storageQueueName -Context $azureStorageContext
}