azure 如何使用PowerShell而不使用AZcopy设置从本地服务器到blob存储的自动同步?

pxyaymoc  于 2023-02-13  发布在  Shell
关注(0)|答案(1)|浏览(131)

寻找自动同步机制来同步从本地服务器到blob容器的导出文件。我们目前正在使用AZCOPY,这需要大量的时间和人力。我们希望减少手动工作,以保存迁移数据的时间,并通过Power Shell或其他方法永久设置自动数据同步。
当前正在使用AZCOPY

atmip9wb

atmip9wb1#

  • 您可以使用PowerShell的AzureRM模块设置从本地服务器到blob存储的自动同步,而无需使用**azcopy。**步骤如下:
    *首先确保本地服务器上安装了最新版本的AzureRM模块。
  • 在PowerShell中运行以下命令:
Install-Module AzureRM
  • 然后,通过运行以下命令登录到您的Azure帐户:
Login-AzureRmAccount

*登录后,您必须选择包含BlobStorage帐户的**订阅。请使用以下命令:

Select-AzureRmSubscription -SubscriptionId <SubscriptionId>
  • 替换为您的订阅ID。
    *接下来,我们需要创建存储上下文,该上下文包含访问blob存储帐户所需的信息。使用以下命令:
$context = New-AzureStorageContext -StorageAccountName <StorageAccountName> -StorageAccountKey <StorageAccountKey>
  • 替换为StorageAccountName的名称,替换为BlobStorageAccount访问密钥
  • 现在,我们有了存储上下文,我们可以使用Sync-AzureStorageBlob cmdlet将本地文件夹与blob存储同步。
  • 以下示例C:\data文件夹的内容与blob存储中的数据容器同步。
Sync-AzureStorageBlob -DestinationContainer <ContainerName> -DestinationContext $context -Path C:\data -Force
  • 替换为要同步的blob存储容器的名称。
  • 若要自动执行此过程,你可以创建一个PowerShell脚本,按计划运行Sync-AzureStorageBlob cmdlet。你可以使用Windows的任务计划程序**自动运行该脚本。**为此,请按照下列步骤操作:

·打开Task Scheduler应用程序。
·单击Create任务按钮。
·在General tab中,指定任务的名称和描述,然后选择将运行任务的用户帐户。
·在Triggers tab中,单击New button并设置任务的计划。
·在Actions tab中,单击New button并选择启动程序操作。
·在Program/script field中,指定PowerShell可执行文件(powershell.exe)的路径。
·在添加参数字段中,指定包含Sync-AzureStorageBlob cmdlet的脚本的路径。
·单击确定按钮保存任务。
脚本现在根据****指定的计划运行,并自动将本地文件夹的内容与blob**存储同步。

  • 以下是PowerShell脚本示例
-   # Connect to Azure  
    Connect-AzAccount  
      
    # Get the storage context  
    $context = (Get-AzStorageAccount -ResourceGroupName <resource_group_name> -Name <storage_account_name>).Context  
      
    # Get the list of local files  
    $localFiles = Get-ChildItem -Path <local_path>  
      
    # Upload local file to the Blob container  
    foreach ($file in $localFiles) {  
    Set-AzStorageBlobContent -Container <container_name> -FilePath $file.FullName -Blob $file.Name -Context $context  
    }  
      
    # Get the list of Blob files  
    $blobFiles = Get-AzStorageBlob -Container <container_name> -Context $context  
      
    # Delete old versions of the files in the Blob container  
    foreach ($blobFile in $blobFiles) {  
    $localFile = (Get-ChildItem -Path <local_path> | Where-Object { $_.Name -eq $blobFile.Name }).FullName  
    if ($localFile -ne $null) {  
    if ($blobFile.Properties.LastModified -lt (Get-ChildItem -Path $localFile).LastWriteTime) {  
    Remove-AzStorageBlob -Blob $blobFile.Name -Container <container_name> -Context $context  
    }  
    } else {  
    Remove-AzStorageBlob -Blob $blobFile.Name -Container <container_name> -Context $context  
    }  
    }

引用自Microsoft文档。

相关问题