在 Azure Logic Apps 的標準工作流程中新增並執行 PowerShell 腳本程序代碼 (預覽)
適用於:Azure Logic Apps (標準)
注意
此功能處於預覽狀態,且受限於 Microsoft Azure 預覽版的補充使用規定。
若要在 Azure Logic Apps 中與標準工作流程內嵌執行自定義整合工作,您可以直接從工作流程中新增並執行 PowerShell 程式代碼。 針對這項工作,請使用名為 Execute PowerShell Code 的內嵌程式代碼動作。 此動作會從 PowerShell 程式代碼傳回結果,讓您可以在工作流程的後續動作中使用此輸出。
這項功能可提供下列優點:
在工作流程設計工具中撰寫您自己的腳本,以便解決複雜的整合挑戰。 不需要其他服務方案。
這項優點可簡化工作流程的開發,並降低管理更多服務的複雜性和成本。
產生專用的程式碼檔案,此檔案可在工作流程內提供個人化的指令碼空間。
與 Azure Functions PowerShell Functions 整合,其提供強大的功能和繼承,以進行進階工作執行。
將指令碼與工作流程一起部署。
本指南說明如何在工作流程中新增動作,並新增您想要執行的PowerShell程式碼。
必要條件
Azure 帳戶和訂用帳戶。 如果您沒有訂用帳戶,請註冊一個免費的 Azure 帳戶。
您想要在其中新增 PowerShell 腳本的標準邏輯應用程式工作流程。 工作流程必須已使用觸發程序啟動。 如需詳細資訊,請參閱建立範例標準邏輯應用程式工作流程 (部分機器翻譯)。
您可以針對您的案例使用任何觸發程序,但本指南會使用名為收到 HTTP 要求時的要求觸發程序以及回應動作來作為範例。 當其他應用程式或工作流程傳送要求給觸發程序的端點 URL 時,該工作流程便會執行。 範例指令碼會傳回程式碼的執行結果,以作為可在後續動作中使用的輸出。
考量
Azure 入口網站 會將腳本儲存為PowerShell腳本檔案 (.ps1),與workflow.json檔案相同的資料夾中,該檔案會儲存工作流程的JSON定義,並將檔案連同工作流程定義一起部署到邏輯應用程式資源。
.ps1 檔格式可讓您撰寫較少的「重複使用」,並專注於撰寫 PowerShell 程式代碼。 如果您重新命名動作,檔案也會重新命名,但反之亦然。 如果您直接重新命名檔案,則重新命名的版本會覆寫舊版。 如果動作名稱和檔名不相符,動作就無法找到檔案,並嘗試建立新的空白檔案。
對工作流程來說,指令碼是本機項目。 若要在其他工作流程中使用相同的指令碼,請在 KuduPlus 主控台中檢視指令檔,然後複製指令碼以在其他工作流程中重複使用。
限制
名稱 | 限制 | 備註 |
---|---|---|
指令碼執行持續時間 | 10 分鐘 | 如果您有需要較長持續時間的案例,請使用產品意見反應選項來提供關於您需求的詳細資訊。 |
輸出大小 | 100 MB | 輸出大小取決於動作的輸出大小限制,這通常為 100 MB。 |
新增執行 PowerShell 程式代碼動作
在 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 的複雜物件,其中包含下列輸出。
名稱 | 類型 | Description |
---|---|---|
名稱 | String | 觸發程式或動作的名稱。 |
輸入 | JToken | 傳入觸發程式或動作的輸入值。 |
輸出 | JToken | 執行之觸發程式或動作的輸出。 |
StartTime | Datetime | 觸發程式或動作的開始時間。 |
EndTime | Datetime | 觸發程式或動作的結束時間。 |
ScheduledTime | Datetime | 執行觸發程式或動作或觸發程式的排程時間。 |
OriginHistoryName | String | 已啟用Split-On選項之觸發程式的源歷程記錄名稱。 |
SourceHistoryName | String | 重新提交之觸發程式的來源歷程記錄名稱。 |
TrackingId | String | 作業追蹤標識碼。 |
代碼 | String | 結果的狀態代碼。 |
狀態 | String | 觸發程式或動作的執行狀態,例如 成功 或 失敗。 |
錯誤 | JToken | HTTP 錯誤碼。 |
TrackedProperties | JToken | 您設定的任何追蹤屬性。 |
將輸出傳回至您的工作流程
若要傳回工作流程的任何輸出,您必須使用 Push-WorkflowOutput Cmdlet。
自訂PowerShell命令
執行 PowerShell 程式代碼 動作包含下列自定義 PowerShell 命令(Cmdlet), 可讓您與工作流程和其他工作流程中的作業互動:
Get-TriggerOutput
從工作流程的觸發程式取得輸出。
語法
Get-TriggerOutput
參數
無。
Get-ActionOutput
取得工作流程中另一個動作的輸出,並傳回名為 PowershellWorkflowOperationResult 的物件。
語法
Get-ActionOutput [ -ActionName <String> ]
參數
參數 | 類型 | 描述 |
---|---|---|
ActionName | String | 工作流程中動作的名稱,其中包含您想要參考的輸出。 |
Push-WorkflowOutput
將執行 PowerShell 程式代碼動作的輸出推送至您的工作流程,以傳回任何物件類型。 如果傳回值為 null,您就會從 Cmdlet 取得 Null 物件錯誤。
注意
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個公用模組。 若要使用任何公用模組,您必須遵循下列步驟來啟用此功能:
在 [進階工具] 頁面上,選取 [執行]。
在 Kudu Plus 工具列的 [偵錯] 主控台選單中,選取 [CMD]。
使用目錄結構或命令行,流覽至邏輯應用程式的根層級 C:\home\site\wwwroot 。
開啟工作流程的 host.json 檔案,並將 Managed 相依性屬性設定為 true,預設已設定此屬性。
"managedDependency": { "enabled": true }
開啟名為 requirements.psd1 的檔案。 使用下列語法包含您想要之模組的名稱和版本: MajorNumber.* 或確切的模組版本,例如:
@{ Az = '1.*' SqlServer = '21.1.18147' }
公用模組的考慮
如果您使用相依性管理,則適用下列考慮:
若要下載模組,公用模組需要存取 PowerShell 資源庫。
受控相依性目前不支援需要您接受授權的模組,方法是以互動方式接受授權,或在執行 Install-Module 時提供 -AcceptLicense 選項。
私人模組
您可以產生自己的私人 PowerShell 模組。 若要建立您的第一個 PowerShell 模組,請參閱 撰寫 PowerShell 腳本模組。
在 Azure 入口網站 的邏輯應用程式資源選單上,於 [開發工具] 底下,選取 [進階工具]。
在 [進階工具] 頁面上,選取 [執行]。
在 Kudu Plus 工具列的 [偵錯] 主控台選單中,選取 [CMD]。
使用目錄結構或命令行,流覽至邏輯應用程式的根層級 C:\home\site\wwwroot 。
建立名為 Modules的資料夾。
在 [ 模組 ] 資料夾中,建立與私人模組同名的子資料夾。
在您的私人模組資料夾中,新增具有 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
編譯錯誤
在此版本中,網頁型編輯器包含有限的 IntelliSense 支援,此支援仍在改善中。 當您儲存工作流程時,系統會偵測到任何編譯錯誤,而 Azure Logic Apps 執行階段會編譯您的指令碼。 這些錯誤會透過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# 文稿