相关文章推荐
温暖的香烟  ·  灯箱怎么接电线_抖抖音·  2 年前    · 
读研的橙子  ·  CSS组件_0 ...·  2 年前    · 

此功能为预览版,受 Microsoft Azure 预览版补充使用条款 限制。

若要在 Azure 逻辑应用中使用标准工作流内联执行自定义集成任务,可以直接从你的工作流中添加并运行 PowerShell 代码。 对于此任务,请使用名为“执行 PowerShell 代码”的“内联代码”操作 。 此操作返回 PowerShell 代码的结果,以便你可以在工作流的后续操作中使用此输出。

此功能提供以下优势:

  • 在工作流设计器中编写你自己的脚本,以便解决复杂的集成难题。 不需要其他服务计划。

    这一优势简化了工作流开发,并降低了管理更多服务的复杂性和成本。

  • 生成一个专用代码文件,该文件在你的工作流中提供个性化的脚本编写空间。

  • Azure Functions PowerShell Functions 集成,为高级任务执行提供强大的功能和继承。

  • 与工作流一起部署脚本。

    本指南介绍如何在工作流中添加操作并添加要运行的 PowerShell 代码。

  • Azure 帐户和订阅。 如果没有订阅,可以 注册免费的 Azure 帐户

  • 要在其中添加 PowerShell 脚本的标准逻辑应用工作流。 工作流须以触发器开头。 有关详细信息,请参阅 创建示例标准逻辑应用工作流

    你可以根据自己的情况使用任何触发器,作为示例,本指南使用名为“收到 HTTP 请求时”的请求触发器以及“响应”操作 。 当另一个应用程序或工作流向触发器的终结点 URL 发送请求时,工作流就会运行。 示例脚本将代码执行的结果作为输出返回,你可以在后续操作中使用该输出。

  • Azure 门户将脚本作为 PowerShell 脚本文件 (.ps1) 保存在与 workflow.json 文件相同的文件夹中,该文件存储了工作流的 JSON 定义,并将该文件与工作流定义一起部署到逻辑应用资源中

    使用 .ps1 文件格式可以减少“样板”编写工作量,你只需专注于编写 PowerShell 代码 。 如果重命名操作,则文件也会重命名,但反之亦然。 如果直接重命名文件,则重命名的版本将覆盖以前的版本。 如果操作名称和文件名不匹配,操作会找不到该文件并尝试创建新的空文件。

  • 脚本在工作流的本地。 若要在其他工作流中使用同一脚本,请 在 KuduPlus 控制台中查看脚本文件 ,然后复制该脚本以便在其他工作流中重用

  • 在设计器中, 按照以下常规步骤将名为“执行 PowerShell 代码”的“内联代码操作”操作添加到工作流

  • 操作信息窗格打开后,在“参数”选项卡上的“代码文件”框中,使用自己的代码更新预先填充的示例代码

  • 若要访问来自工作流的数据,请参阅本指南后面的 访问脚本中的工作流触发器和操作输出

  • 若要将脚本的结果或其他数据返回到工作流,请参阅 将数据返回到工作流

    以下示例演示操作的“参数”选项卡以及示例脚本代码

    以下示例演示示例脚本代码:

    # Use the following cmdlets to retrieve outputs from prior steps.
    # $triggerOutput = Get-TriggerOutput
    # $ActionOutput = Get-ActionOutput -ActionName <action-name>
    $customResponse =  [PSCustomObject]@{
       Message = "Hello world!"
    # Use Write-Debug/Write-Host/Write-Output/ to log messages to Application Insights.
    # Write-Host/Write-Output/Write-Debug and 'return' won't return an output to the workflow.
    # Write-Host "Sending to Application Insight logs"
    # Use Push-WorkflowOutput to push outputs into subsequent actions.
    Push-WorkflowOutput -Output $customResponse
    

    以下示例演示自定义示例脚本:

    $action = Get-TriggerOutput
    $results = "Hello from PowerShell!"
    Push-WorkflowOutput -Output $results
    
  • 完成后,保存工作流。

    运行工作流后,可以在 Application Insights(如果已启用)中查看工作流输出。 有关详细信息,请参阅在 Application Insights 中查看輸出

    访问脚本中的工作流触发器和操作输出

    使用具有多个参数的自定义对象返回触发器和前面的操作的输出值。 若要访问这些输出并确保返回所需的值,请使用 Get-TriggerOutputGet-ActionOutput,以及 Push-WorkflowOutput cmdlet 以及下表中所述的任何适当参数,例如

    $trigger = Get-TriggerOutput
    $statusCode = $trigger.status.ToString();
    $action = Get-ActionOutput -ActionName Compose
    $actionOutput = $action.outputs['actionOutput'].ToString();
    $populatedString = "Send the $statusCode for the trigger status and $actionOutputName."
    Push-WorkflowOutput -Output $populatedString
    

    在 PowerShell 中,如果引用在复杂对象中具有 JValue 类型的对象,并将该对象添加到字符串,则会出现格式异常。 若要避免此错误,请使用 ToString()

    触发器和操作响应输出

    下表列出了调用 Get-ActionOutput 或 Get-TriggerOutput 时生成的输出。 返回值是一个名为 PowershellWorkflowOperationResult 的复杂对象,其中包含以下输出

    若要将任何输出返回到工作流,必须使用 Push-WorkflowOutput cmdlet

    自定义 PowerShell 命令

    “执行 PowerShell 代码”操作包含以下自定义 PowerShell 命令 (cmdlet),用于与工作流和工作流中的其他操作进行交互

    Get-TriggerOutput

    获取工作流触发器的输出。

    Get-TriggerOutput
    

    Get-ActionOutput

    获取工作流中另一个操作的输出,并返回名为 PowershellWorkflowOperationResult 的对象

    Get-ActionOutput [ -ActionName <String> ]
    

    Push-WorkflowOutput

    将“执行 PowerShell 代码”操作的输出推送到工作流,这样可以传递回任何对象类型。 如果返回值为 null,则会从 cmdlet 获得空对象错误。

    Write-Debug、Write-Host 和 Write-Output cmdlet 不会将值返回到工作流。 return 语句也不会将值返回到工作流。 但可以使用这些 cmdlet 编写出现在 Application Insights 中的跟踪消息。 有关详细信息,请参阅 Microsoft.PowerShell.Utility

    Push-WorkflowOutput [-Output <Object>] [-Clobber]
    

    通过 PowerShell 使用托管标识对访问进行身份验证和授权

    使用托管标识,逻辑应用资源和工作流可以对支持 Microsoft Entra 身份验证的任何 Azure 服务和资源的访问进行身份验证和授权,而无需在代码中包含凭据。

    在“执行 PowerShell 代码”操作中,可以使用托管标识对访问进行身份验证和授权,以便你可以对启用访问的其他 Azure 资源执行操作。 例如,可以重启虚拟机或获取另一个逻辑应用工作流的运行详细信息。

    若要从“执行 PowerShell 代码”操作中使用托管标识,必须执行以下步骤

  • 按照以下步骤在逻辑应用上设置托管标识,并向目标 Azure 资源授予托管标识访问权限

    在目标 Azure 资源上,查看以下注意事项:

  • 在“角色”选项卡上,“参与者”角色通常就足矣

  • 在“添加角色分配”页中的“成员”选项卡上,对于“将访问权限分配到”,请确保选择 “托管标识”

  • 选择“选择成员”后,在“选择托管标识”窗格中,选择要使用的托管标识

  • 在“执行 PowerShell 代码”操作中,包含以下代码作为第一个语句

    Connect-AzAccount -Identity
    
  • 现在,可以使用 cmdlet 和模块来处理 Azure 资源了。

    查看脚本文件

  • Azure 门户中,打开具有所需工作流的标准逻辑应用资源。

  • 在逻辑应用资源菜单中的“开发工具”下,选择“高级工具”

  • 在“高级工具”页面上,选择“转到”,这会打开 KuduPlus 控制台

  • 打开“调试控制台”菜单,然后选择“CMD”

  • 转到逻辑应用的根位置:site/wwwroot

  • 按照以下路径转到包含 .ps1 文件的工作流文件夹:site/wwwroot/{workflow-name}

  • 在文件名旁边,选择“编辑”打开并查看该文件

    在 Application Insights 中查看日志

  • Azure 门户中,在逻辑应用资源菜单的“设置”下,选择“Application Insights”,然后选择你的逻辑应用。

  • 在“Application Insights”菜单上,在“监视”下,选择“日志”。

  • 创建查询以从工作流执行中查找任何跟踪或错误,例如:

    union traces, errors
    | project TIMESTAMP, message
    

    PowerShell 模块是包含各种组件的自包含可重用单元,例如:

  • Cmdlet:执行特定任务的单个命令。
  • 提供程序:允许访问数据存储,例如注册表或文件系统,就如同它们是驱动器一样。
  • 函数:执行特定操作的可重用代码块。
  • 变量:存储在模块中以供使用的数据。
  • 其他类型的资源。
  • 模块会整理 PowerShell 代码,使其更易于分发。 例如,可以创建自己的模块来打包相关功能,使其更易于管理和共享。 通过“执行 PowerShell 代码”操作,可以导入公共和专用 PowerShell 模块

    若要查找公开可用的模块,请访问 PowerShell 库。 标准逻辑应用资源最多可支持 10 个公共模块。 若要使用任何公共模块,必须按照以下步骤启用此功能:

  • Azure 门户的逻辑应用资源菜单中,在“开发工具”下,选择“高级工具”

  • 在“高级工具”页中,选择“Go”。

  • 在 Kudu Plus 工具栏上,从“调试控制台”菜单中,选择“CMD”

  • 使用目录结构或命令行浏览到逻辑应用的根级别 (C:\home\site\wwwroot)

  • 打开工作流的 host.json 文件,并将“托管依赖项”属性设置为 true(默认已设置)

    "managedDependency": {
        "enabled": true
    
  • 打开名为 requirements.psd1 的文件。 使用以下语法包括所需模块的名称和版本:MajorNumber.* 或确切的模块版本,例如

    Az = '1.*' SqlServer = '21.1.18147'

    公共模块注意事项

    如果使用依赖项管理,则需注意以下事项:

  • 若要下载模块,公共模块需要 PowerShell 库的访问权限。

  • 托管依赖项当前不支持要求你接受许可证的模块,无论是通过交互方式接受许可证,还是通过在运行 Install-Module 时提供 -AcceptLicense 选项

    可以生成自己的专用 PowerShell 模块。 若要创建你的第一个 PowerShell 模块,请参阅编写 PowerShell 脚本模块

  • Azure 门户的逻辑应用资源菜单中,在“开发工具”下,选择“高级工具”

  • 在“高级工具”页中,选择“Go”。

  • 在 Kudu Plus 工具栏上,从“调试控制台”菜单中,选择“CMD”

  • 使用目录结构或命令行浏览到逻辑应用的根级别 (C:\home\site\wwwroot)

  • 创建名为“模块”的文件夹

  • 在“模块”文件夹中,创建与专用模块同名的子文件夹

  • 在专用模块文件夹中,使用 psm1 文件扩展名添加专用 PowerShell 模块文件。 还可以包含具有 psd1 文件扩展名的可选 PowerShell 清单文件

    完成后,完整的逻辑应用文件结构与以下示例类似:

    MyLogicApp
    -- execute_powershell_script.ps1
    -- mytestworkflow.json
    Modules
    -- MyPrivateModule
    --- MyPrivateModule.psd1
    --- MyPrivateModule.psm1
    -- MyPrivateModule2
    --- MyPrivateModule2.psd1
    --- MyPrivateModule2.psm1
    requirements.psd1
    host.json
    

    在此版本中,基于 Web 的编辑器包含有限的 IntelliSense 支持,目前仍在改进中。 保存工作流时会检测任何编译错误,并且 Azure 逻辑应用运行时会编译脚本。 这些错误通过 Application Insights 显示在逻辑应用的错误日志中。

    运行时错误

    工作流操作不返回任何输出。

    请确保使用 Push-WorkflowOutput cmdlet

    “执行 PowerShell 代码”操作失败:“无法识别‘{some-text}’一词…”

    如果在 requirements.psd1 文件中错误地引用公共模块,或者 C:\home\site\wwwroot\Modules{module-name} 路径中不存在专用模块,则会出现以下错误

    无法将“{some-text}”一词识别为 cmdlet、函数、脚本文件或可执行程序的名称。 检查名称的拼写,如果包含路径,请验证该路径是否正确,并重试。

    默认情况下,Az* 模块显示在 requirements.psd1 文件中,但在创建文件时会注释掉它们。 从模块引用 cmdlet 时,请确保取消注释模块。

    “执行 PowerShell 代码”操作失败:“无法将实参绑定到形参‘Output’,因为它为 null”。

    尝试将 null 对象推送到工作流时,会发生此错误。 确认要使用 Push-WorkflowOutput 发送的对象是否不为 null

  • 添加和运行 JavaScript 代码片段
  • 添加和运行 C# 脚本
  •