PowerShell检查Azure存储容器是否存在

时间:2014-04-22 14:15:56

标签: powershell azure azure-storage

我正在创建一个PowerShell脚本来执行几个步骤,其中一个步骤涉及删除Azure存储容器:

Remove-AzureStorageContainer ....

下一步取决于此删除工作。

如何才能知道先前的REMOVE已成功执行,以便继续执行下一步?

喜欢的东西;

while(Test-AzureStorageContainerExist "mycontainer")
{
    Start-Sleep -s 100
}
<step2>

不幸的是&#39; Test-AzureStorageContainerExist&#39;似乎不可用。 :)

3 个答案:

答案 0 :(得分:8)

您可以请求存储容器列表并查找特定存储容器列表并等待,直到不再返回。如果帐户中没有大量容器,这可以正常工作。如果它确实有很多容器,那么这根本不会有效。

while (Get-AzureStorageContainer | Where-Object { $_.Name -eq "mycontainer" })
{
    Start-Sleep -s 100
    "Still there..."
}

Get-AzureStorageContainer cmdlet还采用-Name参数,您可以执行循环请求返回它;但是,当容器不存在时,它会抛出错误(未找到资源)而不是提供空结果,因此您可以捕获该错误并知道它已消失(确保明确查找Reource Not found vs超时或类似的东西)。

更新:另一种选择是直接为get容器属性调用REST API,直到获得404(未找到)。这意味着容器已经消失。 http://msdn.microsoft.com/en-us/library/dd179370.aspx

答案 1 :(得分:0)

尝试/捕获方法:

try {
    while($true){
        Get-AzureStorageContainer -Name "myContainer -ErrorAction stop
        sleep -s 100
    }
} 
catch { 
     write-host "no such container" 
     # step 2 action
}

答案 2 :(得分:0)

这有效

$containerDeleted = $false
while(!$containerDeleted) {
    Try {  
        Write-Host "Try::New-AzureStorageContainer"
        New-AzureStorageContainer -Name $storageContainerName -Permission Off -Context $context -Verbose -ErrorAction Stop
        $containerDeleted = $true
    } catch [Microsoft.WindowsAzure.Storage.StorageException] {
        Start-Sleep -s 5
    }
}

如果查看返回的错误消息,则异常代码是容器被删除