适用于:Azure 逻辑应用(标准)
备注
此功能为预览版,受 Azure 预览版补充使用条款约束。
若要在 Azure 逻辑应用中使用标准工作流内联执行自定义集成任务,可以直接从你的工作流中添加并运行 PowerShell 代码。 对于此任务,请使用名为“执行 PowerShell 代码”的“内联代码”操作。 此操作返回 PowerShell 代码的结果,以便你可以在工作流的后续操作中使用此输出。
此功能提供以下优势:
在工作流设计器中编写你自己的脚本,以便解决复杂的集成难题。 不需要其他服务计划。
此优势降低了复杂性和成本,因为你可以管理更多服务并简化工作流开发。
生成一个专用代码文件,该文件在你的工作流中提供个性化的脚本编写空间。
与 Azure Functions PowerShell 函数集成,为高级任务执行提供强大的功能和继承。
与工作流一起部署脚本。
本指南介绍如何在工作流中添加操作并添加要运行的 PowerShell 代码。
Azure 帐户和订阅。 如果没有订阅,可以注册 Azure 帐户。
包含要在其中添加 PowerShell 脚本的标准工作流的逻辑应用资源。
工作流须以触发器开头。 你可以根据自己的情况使用任何触发器,作为示例,本指南使用名为“收到 HTTP 请求时”的请求触发器以及“响应”操作。 当另一个应用程序或工作流向触发器的终结点 URL 发送请求时,工作流就会运行。 示例脚本将代码执行的结果作为输出返回,你可以在后续操作中使用该输出。
如果没有逻辑应用资源和工作流,请按照以下步骤立即创建它们:
Azure 门户将脚本作为 PowerShell 脚本文件 (.ps1) 保存在与 workflow.json 文件相同的文件夹中,该文件存储了工作流的 JSON 定义,并将该文件与工作流定义一起部署到逻辑应用资源中。
.ps1 文件格式使你可以编写更少的“样板”,并专注于编写 PowerShell 代码。 如果重命名操作,则文件也会重命名,但反之亦然。 如果直接重命名文件,则重命名的版本将覆盖以前的版本。 如果操作名称和文件名不匹配,操作会找不到该文件并尝试创建新的空文件。
脚本在工作流的本地。 若要在其他工作流中使用同一脚本,请在 Kudu 控制台中查看脚本文件,然后复制脚本以在其他工作流中重复使用。
名称 | 限制 | 备注 |
---|---|---|
脚本运行持续时间 | 10 分钟 | 如果你的方案需要更长的持续时间,请使用产品反馈选项提供有关需求的详细信息。 |
输出大小 | 100 MB | 输出大小取决于操作的输出大小限制,通常为 100 MB。 |
在 Azure 门户中,打开你的标准逻辑应用资源。
在资源边栏菜单中的 “工作流”下,选择“ 工作流”,然后选择空白工作流。
在工作流边栏菜单中的 “工具”下,选择设计器以打开工作流。
按照常规步骤添加操作,将名为Execute PowerShell Code的内联代码操作添加到工作流中。
操作信息窗格打开后,在“参数”选项卡上的“代码文件”框中,使用自己的代码更新预先填充的示例代码。
若要访问来自工作流的数据,请参阅本指南后面的访问脚本中的工作流触发器和操作输出。
若要将脚本的结果或其他数据返回到工作流,请参阅将数据返回到工作流。
以下示例演示操作的“参数”选项卡以及示例脚本代码:
以下示例演示示例脚本代码:
# 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-TriggerOutput、Get-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
个名为的复杂对象,其中包含以下输出。
名称 | 类型 | 说明 |
---|---|---|
名称 | 字符串 | 触发器或动作的名称 |
输入 | JToken | 传递到触发器或动作的输入值 |
输出 | JToken | 已执行的触发器或动作的输出 |
StartTime | 日期时间 | 触发器或动作的开始时间 |
EndTime | 日期时间 | 触发器或操作的结束时间 |
ScheduledTime | 日期时间 | 触发器或动作运行的计划时间 |
OriginHistoryName | 字符串 | 启用 SplitOn 选项的触发器的原始历史名称 |
SourceHistoryName | 字符串 | 重新提交的触发器的源历史记录名称 |
TrackingId | 字符串 | 操作跟踪 ID |
代码 | 字符串 | 结果的状态代码 |
地位 | 字符串 | 触发器或操作的运行状态,例如“成功”或“失败” |
错误 | JToken | HTTP 错误代码 |
TrackedProperties | JToken | 设置的任何跟踪属性 |
若要将任何输出返回到工作流,必须使用 Push-WorkflowOutput cmdlet。
“执行 PowerShell 代码”操作包含以下自定义 PowerShell 命令 (cmdlet),用于与工作流和工作流中的其他操作进行交互:
获取工作流触发器的输出。
Get-TriggerOutput
无。
获取工作流中另一个操作的输出,并返回一个名为 PowershellWorkflowOperationResult
的对象。
Get-ActionOutput [ -ActionName <String> ]
参数 | 类型 | 说明 |
---|---|---|
ActionName | 字符串 | 工作流中包含你要引用的输出的操作的名称。 |
将“执行 PowerShell 代码”操作的输出推送到工作流,这样可以传递回任何对象类型。 如果返回值为 null,则会从 cmdlet 获得空对象错误。
备注
Write-Debug
、Write-Host
和Write-Output
cmdlet 不会将值返回到工作流。 该 return
语句也不会将值返回到工作流。
但可以使用这些 cmdlet 编写出现在 Application Insights 中的跟踪消息。
有关详细信息,请参阅 Microsoft.PowerShell.Utility。
Push-WorkflowOutput [-Output <Object>] [-Clobber]
参数 | 类型 | 说明 |
---|---|---|
输出 | 多种多样 | 要返回到工作流的输出。 此输出可以具有任何类型。 |
Clobber | 多种多样 | 一个可选开关参数,可用于替代以前推送的输出。 |
使用托管标识,逻辑应用资源和工作流可以对支持 Microsoft Entra 身份验证的任何 Azure 服务和资源的访问进行身份验证和授权,而无需在代码中包含凭据。
在“执行 PowerShell 代码”操作中,可以使用托管标识对访问进行身份验证和授权,以便你可以对启用访问的其他 Azure 资源执行操作。 例如,可以重启虚拟机或获取另一个逻辑应用工作流的运行详细信息。
若要从“执行 PowerShell 代码”操作中使用托管标识,必须执行以下步骤:
在逻辑应用上设置托管标识,并在目标 Azure 资源上授予托管标识访问权限。 有关详细步骤,请参阅 使用托管标识对 Azure 资源的访问和连接进行身份验证。
在目标 Azure 资源上,查看以下注意事项:
在“角色”选项卡上,“参与者”角色通常就足矣。
在“添加角色分配”页中的“成员”选项卡上,对于“将访问权限分配到”,请确保选择 “托管标识”。
选择“选择成员”后,在“选择托管标识”窗格中,选择要使用的托管标识。
在“执行 PowerShell 代码”操作中,包含以下代码作为第一个语句:
Connect-AzAccount -Identity
现在,可以使用 cmdlet 和模块来处理 Azure 资源了。
在 Azure 门户中,打开具有所需工作流的标准逻辑应用资源。
在边栏菜单上的 “开发工具”下,选择“ 高级工具”。
在 “高级工具” 页上,选择“ Go”,这将打开 Kudu 控制台。
打开“调试控制台”菜单,然后选择“CMD”。
转到逻辑应用的根位置:site/wwwroot
按照以下路径转到包含 .ps1 文件的工作流文件夹:site/wwwroot/{workflow-name}
在文件名旁边,选择“编辑”打开并查看该文件。
在 Azure 门户的逻辑应用边栏菜单中,在监视下,选择Application Insights (而不是Insights),然后选择指向您的 Application Insights 资源的链接。
在 Application Insights 资源边栏菜单中的 “监视”下,选择“ 日志”。
创建查询以从工作流执行中查找任何跟踪或错误,例如:
union traces, errors | project TIMESTAMP, message
PowerShell 模块是包含各种组件的自包含可重用单元,例如:
- Cmdlet:执行特定任务的单个命令。
- 提供程序:允许访问数据存储,例如注册表或文件系统,就如同它们是驱动器一样。
- 函数:执行特定操作的可重用代码块。
- 变量:存储在模块中以供使用的数据。
- 其他类型的资源。
模块会整理 PowerShell 代码,使其更易于分发。 例如,可以创建自己的模块来打包相关功能,使其更易于管理和共享。 通过“执行 PowerShell 代码”操作,可以导入公共和专用 PowerShell 模块。
若要查找公开可用的模块,请访问 PowerShell 库。 标准逻辑应用资源最多可支持 10 个公共模块。 若要使用任何公共模块,必须按照以下步骤启用此功能:
在 Azure 门户中的逻辑应用资源边栏菜单中,在 “开发工具”下,选择“ 高级工具”。
在“高级工具”页中,选择“Go”。
在“Kudu”工具栏上,打开“调试控制台”菜单,然后选择“CMD”。
使用目录结构或命令行浏览到逻辑应用的根级别 (C:\home\site\wwwroot)。
打开工作流的 host.json 文件,并将
ManagedDependency.enabled
属性设置为true
,默认已设置。"managedDependency": { "enabled": true }
打开名为 requirements.psd1 的文件。 使用以下语法包括所需的模块的名称和版本:
MajorNumber.*
或确切的模块版本,例如:@{ Az = '1.*' SqlServer = '21.1.18147' }
如果使用依赖项管理,则需注意以下事项:
若要下载模块,公共模块需要 PowerShell 库的访问权限。
托管依赖项当前不支持要求你接受许可证的模块,无论是以交互方式接受许可证,还是在运行 Install-Module 时提供
-AcceptLicense
选项。
可以生成自己的专用 PowerShell 模块。 若要创建你的第一个 PowerShell 模块,请参阅编写 PowerShell 脚本模块。
在 Azure 门户中的逻辑应用资源边栏菜单中,在 “开发工具”下,选择“ 高级工具”。
在“高级工具”页中,选择“Go”。
在“Kudu”工具栏上,打开“调试控制台”菜单,然后选择“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。
如果在 requirements.psd1 文件中错误地引用了公共模块,或者专用模块在路径 C:\home\site\wwwroot\Modules{module-name} 中不存在,则会出现以下错误:
“{some-text}”一词无法识别为 cmdlet、函数、脚本文件或可执行程序的名称。 检查名称的拼写,或者是否包含路径,请验证路径是否正确,然后重试。
备注
默认情况下,Az* 模块显示在 requirements.psd1 文件中,但在创建文件时会注释掉它们。 从模块引用 cmdlet 时,请确保取消注释模块。
尝试将 null 对象推送到工作流时,会发生此错误。 请确认你正在发送的 Push-WorkflowOutput
对象是否不为 null。