Powershell - учетные записи хранения Azure - получение времени / даты последней проверки подлинности

Попытка получить список учетных записей хранения, которые не используются. Я попытался пойти по маршруту LastModified, но есть несколько проблем: во-первых, это работает только с хранилищем BLOB-объектов, во-вторых, если контейнер имеет имя со знаком доллара (например, $ web), ошибки Get-AzStorageBlob отсутствуют.

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


person Chris.Robinson.WTW    schedule 23.03.2021    source источник


Ответы (1)


Я использовал приведенную ниже логику и успешно выполнил аналогичное требование.

Логика:

Вы можете в основном перебирать каждую учетную запись хранения, находить в них каждый контейнер, отсортировать их по дате последнего изменения (по убыванию) - выбрать самую верхнюю - проверить, превышает ли она 90 (любое количество дней в соответствии с вашим требованием) дней. Если да, удалите их.

Код фрагмента:

#Setting the AzContext for the required subscription
Set-AzContext -SubscriptionId "<YOUR SUBSCRIPTION ID>"

#Going through every storage account in the mentioned Subscription
foreach ($storageAccount in Get-AzStorageAccount) 
{

#Storing the Account Name and Resource Group name which will be used in the below steps
$storageAccountName = $storageAccount.StorageAccountName
$resourceGroupName = $storageAccount.ResourceGroupName


# Getting the storage Account Key - it could be any 1 of the key. Taken the first key for instance. 
$storageAccountKey = (Get-AzStorageAccountKey -Name $storageAccountName -ResourceGroupName $resourceGroupName).Value[0]

# Create storage account context using above key
$storagecontext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey

#Gets  all the Storage Container within the Storage Account
#Sorts them in descending order based on the LastModified
#Picks the Topmost or most recently modified date
$lastModified = Get-AzStorageContainer -Context $storagecontext | Sort-Object -Property @{Expression = {$_.LastModified.DateTime}} | Select-Object -Last 1 -ExpandProperty LastModified

# Remove storage account if it is has not been in past 90 days

    if ($lastModified.DateTime -lt (Get-Date).AddDays(-90)) 
    {
        Remove-AzStorageAccount -Name $storageAccountName -ResourceGroupName $resourceGroupName -Force
    }
}

На код была ссылка из этого потока.

Примечание.

Get-AzStorageContainer - относится не только к хранилищу BLOB-объектов.

Возвращаясь к вашему другому вопросу: -

второй, если контейнер назван со знаком доллара (например, $ web). Ошибка Get-AzStorageBlob.

Это было обработано в более поздней версии Az.Storage. Я бы порекомендовал вам обновить модуль и попробовать. Это обсуждалось в этой ветке. Более поздние версии Az.Storage должны быть может обрабатывать контейнеры с именем $ web

введите описание изображения здесь

person Satya V    schedule 23.03.2021
comment
Так получилось, что я использовал именно этот сценарий для моей попытки LastModified. Проблема со сценарием, который я нашел, поэтому мне пришлось пойти по маршруту Blob, заключалась в том, что последнее изменение в контейнере не отражает содержимое указанного контейнера. LM в контейнере не обновляется, если внутри него были изменены большие двоичные объекты. - person Chris.Robinson.WTW; 23.03.2021
comment
Не могли бы вы подтвердить, что используете последнюю версию пакета Az.storage? - person Satya V; 23.03.2021
comment
Да Скрипт 3.4.0 Az.Storage - person Chris.Robinson.WTW; 23.03.2021
comment
Есть другие идеи по этому поводу? - person Chris.Robinson.WTW; 25.03.2021