我正在创建一个从Azure blob存储中删除SQL备份文件的过程。
通过我的研究,似乎可靠地执行删除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
}
答案 0 :(得分:1)
使用ArrayLists代替数组应该可以使您受益匪浅。可以创建的ArrayList对象如下:for vehicle in VehicleDiff.intersection():
print('vehicle:{}'.format(vehicle))
intersection:[2125945310]
vehicle:color:red, brand:fiat
希望有帮助!