在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。
答案 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