#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 может быть непосильным