用于列出Azure中非托管磁盘的Foreach循环

时间:2019-04-18 09:55:35

标签: azure powershell loops foreach disk

在PS中列出Azure托管磁盘非常容易,但是非托管磁盘不是Azure POV的对象,因此很难列出。我试图编写foreach循环以列出每个存储帐户的所有未使用的磁盘(即* .vhd文件)。这是我写的代码:

$StorageAccounts = Get-AzureRmStorageAccount
$sa = $StorageAccounts | foreach-object {

#Get the Management key for the storage account
$key1 = (Get-AzureRmStorageAccountKey -ResourceGroupName $_.ResourceGroupName -name $_.StorageAccountName)[0].value

#Get the Storage Context to access the Storage Container
$storageContext = New-AzureStorageContext -StorageAccountName $_.StorageAccountName -StorageAccountKey $key1

#Get the Storage Container in the Variable
$storageContainer = Get-AzureStorageContainer -Context $storageContext

$blob = Get-AzureStorageBlob -Container $storageContainer.name -Context $storageContext 

 [PSCustomObject]@{
 "Name" = $blob.Name
 "Length" = $blob.Length
 "Storage Account Name" = $_.StorageAccountName
}
}

我希望循环为每个存储帐户获取所有vhd,并将其解析为pscustomobject,以列出所有存储帐户中的所有vhd *,但我得到一个错误:

  

Get-AzureStorageBlob:无法验证参数上的参数   '容器'。参数为null或为空。提供一个论点   不为null或为空,然后重试该命令。在线:13   字符:41

     

Get-AzureStorageBlob:无法将“ System.Object []”转换为类型   参数“容器”所需的“ System.String”。不支持指定的方法。   在第13行:char:41

为什么循环没有在第11行将数据解析到$ storageContainer?我可以看到其他两个变量中的内容,例如$ key1和$ storageContext。

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式重写脚本:

$StorageAccounts = Get-AzureRmStorageAccount
$StorageAccounts.foreach{
    $ctx = $_.Context
    $containers = Get-AzureStorageContainer -Context $ctx
    $containers.foreach{
        $blobs = Get-AzureStorageBlob -Container $_.name -Context $ctx
        $blobs.foreach{
            do_something
        }
    }
}

您不需要获取用于构造上下文的键,因为存储帐户变量包含上下文。然后您需要迭代容器和Blob