Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何删除azure容器中的旧文件_Azure_Backup_Storage_Blob_Containers - Fatal编程技术网

如何删除azure容器中的旧文件

如何删除azure容器中的旧文件,azure,backup,storage,blob,containers,Azure,Backup,Storage,Blob,Containers,我计划通过关闭vm,然后将vhd文件从生产容器复制到备份容器来备份azure vhd文件。如何自动删除备份容器中一周前的vhd文件?这是一个现成的功能。您必须自己编写一些代码。基本上,这些步骤是: 列出备份容器中的所有blob。Blob列表将返回Blob及其属性。其中一个属性将是LastModifiedDate(这将是UTC格式) 然后,您可以将逻辑放在查找“x”天前修改过的blob上。然后,您将继续删除这些blob 还有几件事: 您提到备份容器包含一些VHD,它们本质上是页面blob。列出b

我计划通过关闭vm,然后将vhd文件从生产容器复制到备份容器来备份azure vhd文件。如何自动删除备份容器中一周前的vhd文件?

这是一个现成的功能。您必须自己编写一些代码。基本上,这些步骤是:

  • 列出备份容器中的所有blob。Blob列表将返回Blob及其属性。其中一个属性将是
    LastModifiedDate
    (这将是UTC格式)
  • 然后,您可以将逻辑放在查找“x”天前修改过的blob上。然后,您将继续删除这些blob
  • 还有几件事:

    • 您提到备份容器包含一些VHD,它们本质上是页面blob。列出blob时,还将获得blob类型,以便可以按blob类型(
      PageBlob
      )进一步筛选列表
    • 就自动化进程而言,您可以在PowerShell脚本中编写此脚本,然后使用Windows Scheduler进行调度。如果您喜欢编写node.js,那么可以使用node.js编写相同的逻辑,并使用WindowsAzure移动服务调度器
    如果您可以接受使用PowerShell,那么这将为您提供帮助。它将注册每天运行的计划作业,并删除指定容器中的PageBlob

    $taskTrigger = New-ScheduledTaskTrigger -Daily -At 12:01AM
    Register-ScheduledJob -Name DeleteMyOldFiles -Trigger $taskTrigger -ScriptBlock {
        $isOldDate = [DateTime]::UtcNow.AddDays(-7)
    
        Get-AzureStorageBlob -Container "[YOUR CONTAINER NAME]" |
            Where-Object { $_.LastModified.UtcDateTime -lt $isOldDate -and $_.BlobType -eq "PageBlob" } |
            Remove-AzureStorageBlob
    }
    

    我在尝试删除整个容器时找到了这个答案。使用Rick的答案作为模板,我提出了这个试验,以确定哪些容器将被删除:

    $ctx = New-AzureStorageContext -StorageAccountName $AzureAccount `
                                   -StorageAccountKey  $AzureAccountKey
    
    $isOldDate = [DateTime]::UtcNow.AddDays(-7)
    
    Get-AzureStorageContainer -Context $ctx                              `
         |  Where-Object { $_.LastModified.UtcDateTime -lt $isOldDate  } `
         |  Remove-AzureStorageContainer -WhatIf 
    
    然后,当我确信应该删除列表时,我使用了
    -Force
    ,以便不必确认每次删除:

    Get-AzureStorageContainer -Context $ctx                              `
         |  Where-Object { $_.LastModified.UtcDateTime -lt $isOldDate  } `
         |  Remove-AzureStorageContainer -Force 
    

    我对powershell做的不多。您是否有可能列出一些所需代码的示例?您实际上不必在PowerShell中执行此操作。您可以使用Windows Scheduler制作一个简单的可执行应用程序并进行调度。谢谢您的建议,但不幸的是,我不是程序员。Azure没有用于此任务的某种类型的计划程序,这太糟糕了。感谢您提供的脚本。我无法使计划部分正常工作,所以我将其剥离,并在TaskScheduler上手动计划。如果我有多个容器名称怎么办?您是否使用PowerShell 3.0版?如果是这样的话,那么这个脚本就可以了。我很感谢你发布一个更精简的版本,我可以在任务调度器中安排自己。