Перечислите все большие двоичные объекты azure с метаданными в текстовый файл (например, «dir> listmyfolder. txt» в cmd)

#powershell #azure-blob-storage #azure-storage-account

#powershell #azure-blob-хранилище #azure-storage-account

Вопрос:

Мне нужно получить список всех больших двоичных объектов, которые у нас есть в учетной записи хранилища Azure. У нас около 10 000 контейнеров и 7 000000 больших двоичных объектов.

Я использую PowerShell, но я новичок. Есть ли способ перенести эту информацию в текстовый файл? Мне нужно имя и контейнер каждого большого двоичного объекта. Если я смогу получить размер и дату создания, было бы неплохо.

Ответ №1:

Это зависит от вашей версии PowerShell $PSVersionTable.PSVersion

Если у вас установлена версия 5.1 или выше, вы можете использовать модуль Az

Затем я предполагаю, что этот командлет и / или этот с подстановочными знаками.

Обычно я бы провел вас по точным шагам, но я парень из AWS, и мой опыт работы с Azure очень ограничен. Имея это в виду, я думаю, что это будет выглядеть примерно так

Вы получите все, что вам нужно (при условии, что я прав), и сохраните его в переменной

 $allTheThings = Get-AzStorageContainer -Name * | Get-AzStorageBlob
  

Затем вы можете изучить объекты и выяснить, какая информация вам нужна из них, взяв первый объект в массиве и перечислив все его свойства

 # You can do this, which will just show the properties of the object
$allTheThings[0] | Get-Member

# Or this, which will show the values of each of the properties
$allTheThings[0] | Format-List *
  

Как только вы выясните, какую информацию вы хотите извлечь, вы можете создать пользовательский класс, затем использовать цикл foreach для создания массива, полного этих пользовательских объектов, и экспортировать его в документ csv.

 class MySuperAwesomeClass 
{
    $PropertyIWant1
    $PropertyIWant2
    $PropertyIWant3
    $PropertyIWant4
    $PropertyIWant5
    $PropertyIWant6
    $PropertyIWant7

}

$allTheThings = Get-AzStorageContainer -Name * | Get-AzStorageBlob

$listofInfoIWant = @()

foreach($thing in $allTheThings)
{
    $myCustomObj = New-Object -TypeName MySuperAwesomeClass

    $myCustomObj.PropertyIWant1 = $thing.property1
    $myCustomObj.PropertyIWant2 = $thing.property2
    $myCustomObj.PropertyIWant3 = $thing.property3
    $myCustomObj.PropertyIWant4 = $thing.property4
    $myCustomObj.PropertyIWant5 = $thing.property5
    $myCustomObj.PropertyIWant6 = $thing.property6
    $myCustomObj.PropertyIWant7 = $thing.property7

    $listofInfoIWant  = $myCustomObj
}

$listofInfoIWant | Export-Csv -Path C:tempazStorageInfo.csv -NoTypeInformation

# this will auto-open the newly created csv doc, comment it out to not do that
ii C:tempazStorageInfo.csv
  

Комментарии:

1. Я действительно копался в этом посте, пока вы не выполнили весь процесс создания массива снова и снова. Лучше просто записать выходные данные foreach в переменную

2. @DougMaurer Не могли бы вы уточнить? Потому что это в значительной степени именно то, что я делаю. Я создаю экземпляр массива один раз, затем foreach создает пользовательский объект, устанавливает значения желаемых свойств и добавляет его в этот массив.

3. powershell.org/2013/09/… Каждый раз, когда вы это делаете, создается новый массив, и для больших наборов данных это происходит медленно. Либо выполните $var = foreach(){ … } или используйте system.collections.generic.list

4. И reddit.com/r/PowerShell/comments/i7vwnv/will_this_ever_end/…

5. @DougMaurer Ах, теперь я понимаю, к чему ты клонишь. Правда, если бы я хотел более эффективно экономить время, я бы использовал список, а затем добавил к списку в foreach . Если бы я не заботился о удобочитаемости и хотел более короткий код, я бы выбрал такой $var = foreach(){} подход. Ни то, ни другое не относится к этому ответу. Я использую самый простой и понятный способ сделать то, что хочет OP, поскольку они заявили, что они новичок в PS. По той же причине я не вводил свойства класса. Добавление таких вещей, как System.Collections.Generic.List[System.String] $list, для новичка PS может быть непосильным