【问题标题】:Azure Blob ContainerAzure Blob 容器
【发布时间】:2019-03-25 06:00:27
【问题描述】:

我是 Azure PowerShell 脚本的新手。

如何检查存储帐户下是否存在 blob 容器,如果不存在则创建它。

我尝试了以下代码:

$StorageAccountName = "autodeploystorageacc1818"
$ContainerName = "acceleratorblobcontainer"
$ResourceGroupName =  "autodeploy"
$skuName = "Standard_LRS"
Try
{  
   Get-AzureRmContext -ErrorAction Continue  
}  
Catch [System.Management.Automation.PSInvalidOperationException]  
{  
   Login-AzureRmAccount  
}
Set-AzureRmCurrentStorageAccount -StorageAccountName $StorageAccountName  -ResourceGroupName $ResourceGroupName 
$StorageAccountName  = Get-AzureStorageBlob -Container $ContainerName -Context $StorageAccountName
New-AzureStorageContainer -Name $ContainerName -Permission Off`

但是如何将其写为条件语句,任何帮助或想法都会受到赞赏。

【问题讨论】:

  • 您是从阅读文档开始的吗?

标签: azure powershell azure-blob-storage


【解决方案1】:

一种反模式,但您可以将创建容器的调用包装在 try/catch 块中,然后捕获异常以确定容器是否存在。

$AccountName = "account name"
$AccountKey = "account key"
$StorageContainerName = "container name"
Try
{
     $ctx = New-AzureStorageContext -StorageAccountName $AccountName  -StorageAccountKey $AccountKey
     $container = New-AzureStorageContainer -Name $StorageContainerName -Context $ctx -ErrorAction Stop
}
Catch
{
    Write-Warning "Container $StorageContainerName already exists."
}

创建容器的代码可能由于各种原因而失败,因此您应该捕获特定异常(在本例中为 ResourceAlreadyExistException)并专门处理它。

【讨论】:

    【解决方案2】:

    您可以使用Get-AzureStorageContainer 命令检查容器是否已经存在(或)不存在

    ## Get Parameters
    Param(
        [string] $ResourceGroupName,
        [string] $StorageAccountName,
        [string] $StorageContainerName
    )
    
    ## Static Parameters
    #Login-AzureRmAccount
    #Set-AzureRmContext -SubscriptionID 11111111-1111-1111-1111-111111111111
    #$ResourceGroupName = "GroupName"
    #$StorageAccountName = "AccountName"
    #$StorageContainerName = "ContainerName"
    
    $Keys = Get-AzureRmStorageAccountKey -ResourceGroupName $ResourceGroupName -Name $StorageAccountName;
    
    $StorageContext = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $Keys[0].Value;
    
    if (!(Get-AzureStorageContainer -Context $StorageContext | Where-Object { $_.Name -eq $StorageContainerName })){
    New-AzureStorageContainer -Context $StorageContext -Name $StorageContainerName -Permission Container;  
    }
     else {
    Write-Warning "Container $StorageContainerName already exists."
    }
    

    参考here

    【讨论】:

    • 我在上面的代码中看到的一个问题是,它列出了存储帐户中的所有 blob 容器,以确定是否存在同名的 blob 容器。此外,它只会列出第一个 5000 个 blob 容器(最大 blob 容器/请求),所以如果有超过 5000 个 blob 容器并且列表不包括正在创建的容器名称(但存在),上面的代码将不会进入 else块。
    • 感谢 Jayendran 非常感谢我会试试这个
    猜你喜欢
    • 2020-09-03
    • 2020-01-12
    • 2021-09-11
    • 2013-07-12
    • 1970-01-01
    • 2018-04-13
    • 2020-06-25
    • 2019-02-06
    相关资源
    最近更新 更多