快速入门:使用 PowerShell 创建、分配和运行存储任务

本快速入门介绍如何使用 Azure PowerShell 创建存储任务并将其分配给 Azure 存储帐户。 然后,你将查看运行结果。 存储任务对存储帐户中存在的任何Microsoft Word 文档应用基于时间的不可变性策略。

先决条件

  • 一份 Azure 订阅。 请参阅 免费创建帐户

  • 一个 Azure 存储帐户。 请参阅 创建存储帐户。 创建帐户时,请确保启用版本级不可变性支持,并且未启用分层命名空间功能。

    在公开期间,你只能针对与存储任务位于同一区域的存储帐户进行操作。

  • 在存储帐户或资源组的上下文中已向用户标识分配存储 Blob 数据所有者角色。

  • 向资源组上下文中的用户标识分配的自定义角色,该上下文包含向存储帐户分配任务所需的 RBAC 操作。 请参阅 分配任务所需的权限

  • 已安装 .NET Framework 4.7.2 或更高版本。 有关详细信息,请参阅下载 .NET Framework

  • PowerShell 5.1 或更高版本。

安装 PowerShell 模块

  1. 确保已安装 PowerShellGet 最新版本。

    Install-Module PowerShellGet -Repository PSGallery -Force
    
  2. 关闭并重新打开 PowerShell 控制台。

  3. 安装 Az.Storage PowerShell 模块的版本 7.1.1-preview 或更高版本。 可能需要卸载 PowerShell 模块的其他版本。 有关如何安装 Azure PowerShell 的详细信息,请参阅使用 PowerShellGet 安装 Azure PowerShell

    Install-Module Az.Storage -Repository PsGallery -RequiredVersion 7.1.1-preview -AllowClobber -AllowPrerelease -Force
    
  4. 安装 Az.StorageAction 模块。

    Install-Module -Name Az.StorageAction -Repository PSGallery -Force 
    

    有关如何安装 PowerShell 模块的详细信息,请参阅安装 Azure PowerShell 模块

登录到 Azure 帐户

  1. 打开 Windows PowerShell 命令窗口,然后使用该命令登录到 Azure 帐户 Connect-AzAccount ,然后按照屏幕上的说明进行作。

    Connect-AzAccount
    
  2. 如果你的标识已关联到多个订阅,且系统未提示你选择订阅,请将活动订阅设置为要对其进行操作的存储帐户的订阅。 在此示例中,请将 <subscription-id> 占位符值替换为你的订阅 ID。

    Select-AzSubscription -SubscriptionId <subscription-id>
    

创建存储任务

  1. 使用 JSON 定义 条件 。 条件是一个或多个子句的集合。 每个子句都包含一个属性、一个值和一个运算符。 在以下 JSON 中,属性为 Name,值为 .docx,运算符为 endsWith。 此条款仅允许对 Microsoft Word 文档执行操作。

    $conditions = "[[endsWith(Name, '.docx')]]"
    

    有关属性和运算符的完整列表,请参阅 存储任务条件

    小窍门

    可以将多个条件添加到同一字符串中,并使用逗号分隔它们。

  2. 使用 New-AzStorageActionTaskOperationObject 命令定义每个操作。

    以下操作创建一个设置不可变策略的操作。

    $policyoperation = New-AzStorageActionTaskOperationObject `
    -Name SetBlobImmutabilityPolicy `
    -Parameter @{"untilDate" = (Get-Date).AddDays(1); "mode" = "locked"} `
    -OnFailure break `
    -OnSuccess continue
    
    

    以下操作将在 Word 文档的元数据中设置 Blob 索引标签。

    $tagoperation = New-AzStorageActionTaskOperationObject -Name SetBlobTags `
    -Parameter @{"tagsetImmutabilityUpdatedBy"="StorageTaskQuickstart"} `
    -OnFailure break `
    -OnSuccess continue
    
  3. 使用 New-AzStorageActionTask 命令创建存储任务,并传入前面定义的条件和操作。 此示例在“美国西部”区域中的资源组mystoragetaskresourcegroup中创建一个命名mystoragetask的存储任务。

    $task = New-AzStorageActionTask `
    -Name mystoragetask `
    -ResourceGroupName mystoragetaskresourcegroup `
    -Location westus `
    -Enabled `
    -Description 'my powershell storage task' `
    -IfCondition $conditions `
    -IfOperation $policyoperation,$tagoperation `
    -EnableSystemAssignedIdentity:$true
    

创建分配

存储任务 分配 指定存储帐户。 启用存储任务后,任务的条件和作将应用于该存储帐户。 分配还包含配置属性,这些属性可帮助你定位特定的 Blob,或指定任务运行的时间和频率。 可以为每个目标帐户添加任务。

  1. 使用 New-AzStorageTaskAssignment 命令创建存储任务分配。 以下分配针对名为 mystorageaccount 的帐户的 mycontainer 容器。 此分配指定任务只运行一次,并将执行报告保存到名为 storage-tasks-report的文件夹。 该任务计划从当前时间起运行 10 分钟。

    $startTime = (Get-Date).AddMinutes(10)   
    
    New-AzStorageTaskAssignment `
    -ResourceGroupName mystoragetaskresourcegroup `
    -AccountName mystorageaccount `
    -name mystoragetaskAssignment `
    -TaskId $task.Id `
    -ReportPrefix "storage-tasks-report" `
    -TriggerType RunOnce `
    -StartOn $startTime.ToUniversalTime() `
    -Description "task assignment" `
    -Enabled:$true `
    -TargetPrefix "mycontainer/" `
    -TargetExcludePrefix ""
    
  2. 授予存储任务在目标存储帐户上执行操作的权限。 使用 New-AzRoleAssignment 命令将 Storage Blob Data Owner 的角色分配给存储任务的系统分配托管标识。

    New-AzRoleAssignment `
    -ResourceGroupName mystoragetaskresourcegroup `
    -ResourceName mystorageaccount `
    -ResourceType "Microsoft.Storage/storageAccounts" `
    -ObjectId $task.IdentityPrincipalId  `
    -RoleDefinitionName "Storage Blob Data Owner"
    

查看任务运行的结果

任务完成运行后,使用 Get-AzStorageActionTasksReport 命令获取每个分配的运行报告摘要。

Get-AzStorageActionTasksReport `
-ResourceGroupName mystoragetaskresourcegroup `
-StorageTaskName mystoragetask | Format-List

SummaryReportPath每个报表摘要的字段包含详细报表的路径。 该报告包含容器、Blob、执行的操作以及状态的逗号分隔列表。

清理资源

删除所有已创建的资产。 删除资产的最简单方法是删除资源组。 删除资源组还会删除该组中包含的所有资源。 在以下示例中,删除资源组会删除存储帐户和资源组本身。

Remove-AzResourceGroup -Name $ResourceGroup 

后续步骤

创建存储任务

Microsoft Azure PowerShell 存储操作 cmdlet 参考