Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell检查Azure存储容器是否存在_Powershell_Azure_Azure Storage - Fatal编程技术网

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

PowerShell检查Azure存储容器是否存在,powershell,azure,azure-storage,Powershell,Azure,Azure Storage,我正在创建PowerShell脚本以执行几个步骤,其中一个步骤涉及Azure存储容器的删除: Remove-AzureStorageContainer .... 下一步取决于此移除是否完成 如何让我知道上一次删除已成功执行,以便在下一步继续执行 有点像 while(Test-AzureStorageContainerExist "mycontainer") { Start-Sleep -s 100 } <step2> while(测试AzureStorageContain

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

Remove-AzureStorageContainer ....
下一步取决于此移除是否完成

如何让我知道上一次删除已成功执行,以便在下一步继续执行

有点像

while(Test-AzureStorageContainerExist "mycontainer")
{
    Start-Sleep -s 100
}
<step2>
while(测试AzureStorageContainerExist“mycontainer”)
{
开始睡眠-s100
}

不幸的是,“Test AzureStorageContainerExist”似乎不可用:

您可以请求存储容器列表并查找特定的容器,然后等待该容器不再返回。如果帐户中没有大量容器,则此操作正常。如果它确实有很多容器,那么这将根本没有效率

while (Get-AzureStorageContainer | Where-Object { $_.Name -eq "mycontainer" })
{
    Start-Sleep -s 100
    "Still there..."
}
Get-AzureStorageContainer cmdlet还接受-Name参数,您可以循环请求返回该参数;但是,当容器不存在时,它会抛出一个错误(未找到资源),而不是提供一个空结果,因此您可以捕获该错误并知道它已消失(确保显式查找Reource not found vs超时或类似的内容)

更新:另一个选项是直接为get容器属性调用restapi,直到得到404(未找到)。那就意味着集装箱不见了

try/catch方法:

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

$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
    }
}

如果查看返回异常代码的错误消息,则表明正在删除容器

一种方法是尝试再次创建容器。在被删除之前,您将得到一个
409冲突
responseThanks@SamHolder,但最终的方法有点复杂,因为它与HdInsight和集群创建本身有关。总之,我不能自己创建容器,但您的容器在其他场景中是一个很好的方法。