在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。
你可以用这种方式重写你的脚本:
$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