Удалить резервные копии SQL из хранилища BLOB-объектов - PullRequest
0 голосов
/ 01 февраля 2019

Я создаю процесс удаления файлов резервных копий SQL из хранилища BLOB-объектов Azure.

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

Для этой задачи используются два формата даты: yyyy_MMdd и yyyyMMdd.

Мне нужно найти все файлы от 120 до 365 дней.Необходимо обработать более 50 000 файлов и найти около 500 различных строк дат.

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

Get-AzureStorageBlob -Context $context -Container "ContainerName" | SELECT name | Out-File -filepath C:\Users\name\Desktop\Deletions.txt

$Arr1 = @()
$Arr2 = @()
$collection = @()

ForEach($number in 120..365)
{
 $Arr1  += (Get-Date).addDays(-$number).ToString("yyyy_MMdd")
 $Arr2  += (Get-Date).addDays(-$number).ToString("yyyyMMdd")
}

$collection += $Arr1
$collection += $Arr2

ForEach ($date in $collection)
{
Get-Content -Path C:\Users\name\Desktop\Deletions.txt | Where-Object { $_ -like "*$date*" } | Out-File -filepath C:\Users\name\Desktop\DeleteThese.txt -Append
}

1 Ответ

0 голосов
/ 01 февраля 2019

Использование ArrayLists вместо массивов должно дать вам толчок.Вы можете создавать объекты ArrayList, например: $Arr1 = New-Object System.Collections.ArrayList.

$Arr1 = @()
$Arr2 = @()
$collection = New-Object System.Collections.ArrayList

ForEach($number in 120..365)
{
 $Arr1 += (Get-Date).addDays(-$number).ToString("yyyy_MMdd")
 $Arr2 += (Get-Date).addDays(-$number).ToString("yyyyMMdd")
}

# have to add each item from the original arrays into the arraylist
# otherwise the arraylist will only have a count of 2, the entirety of $Arr1 and $Arr2 respectively

foreach($item in $Arr1) { $collection.Add($item) | Out-Null }
foreach($item in $Arr2) { $collection.Add($item) | Out-Null }

foreach($date in $collection)
{
    Get-Content -Path C:\Users\name\Desktop\Deletions.txt | Where-Object { $_ -like "*$date*" } | Out-File -filepath C:\Users\name\Desktop\DeleteThese.txt -Append
}

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...