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

问题描述 投票:0回答:1

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

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

Get-AzureStorageBlob:无法验证参数'Container'的参数。参数为null或空。提供非null或空的参数,然后再次尝试该命令。在行:13 char:41

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

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

azure powershell loops foreach disk
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.