Цикл Foreach для вывода списка неуправляемых дисков в Azure - PullRequest
0 голосов
/ 18 апреля 2019

Очень легко перечислить управляемые диски Azure в PS, но неуправляемые диски очень сложно перечислить, поскольку они не являются объектами от 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: Невозможно проверить аргумент в параметре «Контейнер».Аргумент нулевой или пустой.Укажите аргумент, который не является пустым или пустым, а затем повторите команду.В строке: 13 символов: 41

Get-AzureStorageBlob: невозможно преобразовать 'System.Object []' в тип 'System.String', требуемый параметром 'Container'.Указанный метод не> поддерживается.В строке: 13 символов: 41

Почему цикл не выполняет синтаксический анализ данных в $ storageContainer в строке 11?Я вижу, что находится внутри двух других переменных, таких как $ key1 и $ storageContext.

1 Ответ

1 голос
/ 18 апреля 2019

вы можете переписать ваш скрипт следующим образом:

$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-объекты

...