適用於:Azure Logic Apps (標準)
若要在 Azure Logic Apps 中使用標準工作流程執行內嵌的自訂整合工作,您可以直接從工作流程內新增並執行 PowerShell 程式碼。 針對這項工作,請使用名為執行 PowerShell 程式碼的內嵌程式碼動作。 此動作會傳回 PowerShell 程式碼的結果,讓您可以在工作流程的後續動作中使用此輸出。
這項功能可提供下列優點:
在工作流程設計工具內撰寫您自己的指令碼,以便您能解決複雜的整合挑戰問題。 不需要其他服務方案。
這項優點可降低複雜度和成本,因為您可以管理更多服務並簡化工作流程開發。
產生專用的程式碼檔案,此檔案可在工作流程內提供個人化的指令碼空間。
與 Azure Functions PowerShell 函式整合,提供強大的功能和繼承,以執行進階任務。
將指令碼與工作流程一起部署。
本指南說明如何在工作流程中新增動作,並新增您想要執行的 PowerShell 程式碼。
先決條件
Azure 帳戶和訂用帳戶。 申請一個免費的 Azure 帳號。
您想要在其中新增 PowerShell 指令碼的標準邏輯應用程式資源 (具有工作流程)。
工作流程必須已使用觸發程序啟動。 你可以在你的情境中使用任何觸發器,但舉例來說,本指南使用名為「當收到 HTTP 請求時」的請求觸發器,以及回應動作。 當其他應用程式或工作流程傳送要求給觸發程序的端點 URL 時,該工作流程便會執行。 範例指令碼會傳回程式碼的執行結果,以作為可在後續動作中使用的輸出。
如果您沒有邏輯應用程式資源和工作流程,請依照下列步驟立即加以建立:
考量
Azure 入口網站會在與 workflow.json 檔案 (儲存了工作流程的 JSON 定義) 相同的資料夾中,將您的指令碼儲存為 PowerShell 指令檔 (.ps1),並將指令檔連同工作流程定義一起部署到邏輯應用程式資源。
.ps1 檔案格式讓你寫的「樣板」比較少,專注寫 PowerShell 程式碼。 如果您重新命名動作,則檔案也會被重新命名,但反之則不然。 如果您直接重新命名檔案,則重新命名的版本會覆寫舊版。 如果動作名稱和檔名不相符,則動作將無法找到該檔案並嘗試建立新的空檔案。
對工作流程來說,指令碼是本機項目。 若要在其他工作流程中使用相同的腳本,請在 Kudu 控制台中檢視腳本檔案,然後複製腳本以在其他工作流程中重複使用。
限制
| 名稱 | 限制 | 注意 |
|---|---|---|
| 指令碼執行持續時間 | 10 分鐘 | 如果您有需要較長持續時間的案例,請使用產品意見反應選項來提供關於您需求的詳細資訊。 |
| 輸出大小 | 100 MB | 輸出大小取決於動作的輸出大小限制,這通常為 100 MB。 |
更新 PowerShell 版本
您可以透過編輯應用程式設定來變更邏輯應用程式資源中的 PowerShell 版本。 不過,在升級應用程式之前,請先檢閱下列考量事項:
版本升級可能會對您的標準邏輯應用程式帶來重大的變更,該應用程式會使用作為 Azure Functions 執行階段上的延伸模組來託管的執行階段。 升級之前,請先檢閱下列移轉指南:升級 Azure Functions 應用程式以在 PowerShell 7.4 上執行。
請確定您的邏輯應用程式使用 Azure 中 Azure Functions 執行階段的最新執行階段版本,即 4.x 版。 如需詳細資訊,請參閱檢視目前的執行階段版本。
附註
根據預設,如果您未指定 PowerShell 版本,Azure Logic Apps 會使用與 Azure Functions 相同的預設版本。 目前,PowerShell 7.4 已正式推出。 如需可用版本的詳細資訊,請參閱 Azure Functions PowerShell 開發人員指南。
根據您要更新 PowerShell 版本的位置,請遵循相對應的步驟:
在 Azure 入口網站中,開啟您的標準邏輯應用程式資源。
在資源側邊欄的 [設定] 下,選取 [環境變數]。
在 [應用程式設定] 索引標籤上,選取 [+ 新增]。
在 [新增/編輯應用程式設定] 窗格中,新增下列新的應用程式設定:
參數 價值觀 說明 名稱 LOGIC_APPS_POWERSHELL_VERSION應用程式設定名稱。 價值 < powershell-version> PowerShell 版本,目前為 7.4。 完成時,請選取 [套用]。 當重新啟動警告出現時,請選取 [繼續]。
您的邏輯應用程式會以更新的版本重新啟動。
新增執行 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的複雜物件,其中包含下列輸出。
| 名稱 | 類型 | 說明 |
|---|---|---|
| 名稱 | 繩子 | 觸發程式或動作的名稱 |
| 輸入 | JToken | 傳入觸發器或動作的輸入值 |
| 輸出 | JToken | 執行之觸發程式或動作的輸出 |
| StartTime | Datetime | 觸發程式或動作的開始時間 |
| EndTime | Datetime | 觸發事件或動作的結束時間 |
| ScheduledTime | Datetime | 執行觸發程序或動作或觸發程序的排程時間 |
| 來源歷史名稱 | 繩子 | 使用 splitOn 屬性之觸發程式的原始歷程記錄名稱 |
| SourceHistoryName | 繩子 | 重新提交之觸發事件的來源歷程記錄名稱 |
| TrackingId | 繩子 | 作業追蹤 ID |
| 代碼 | 繩子 | 結果的狀態代碼 |
| 狀態 | 繩子 | 觸發程式或動作的執行狀態,例如“Succeeded” 或 “Failed” |
| 錯誤 | JToken | HTTP 錯誤碼 |
| TrackedProperties | JToken | 您設定的任何追蹤屬性 |
將輸出傳回至您的工作流程
若要傳回工作流程的任何輸出,您必須使用 Push-WorkflowOutput Cmdlet。
自訂 PowerShell 命令
執行 PowerShell 程式碼動作包含下列自訂 PowerShell 命令 (Cmdlet),用於與您的工作流程和工作流程中的其他作業進行互動:
Get-TriggerOutput
從工作流程的觸發程序中取得輸出。
語法
Get-TriggerOutput
參數
無。
Get-ActionOutput
取得工作流程中另一個動作的輸出,並傳回名為 PowershellWorkflowOperationResult的物件。
語法
Get-ActionOutput [ -ActionName <String> ]
參數
| 參數 | 類型 | 說明 |
|---|---|---|
| ActionName | 繩子 | 工作流程中包含您想要參考之輸出的動作名稱。 |
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]
參數
| 參數 | 類型 | 說明 |
|---|---|---|
| 輸出 | 不定 | 您要傳回至工作流程的輸出。 此輸出可以有任何類型。 |
| Clobber | 不定 | 一個選用的開關參數,您可用來覆寫先前推送的輸出。 |
使用 PowerShell 透過受控識別進行驗證和授權存取權
透過受控識別,您的邏輯應用資源和工作流程可以對任何支援 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}
在檔案名稱旁邊,選取 [編輯] 以開啟並檢視檔案。
在 Application Insights 中檢視記錄
在 Azure 入口網站的邏輯應用程式的側邊欄中,選取 [監控] 下方的 [Application Insights] (不是 [Insights])。
選擇您的應用程式洞察資源連結。
在 [Application Insights] 資源功能表上,選取 [監視] 底下的 [記錄]。
建立查詢以尋找工作流程執行中的任何追蹤或錯誤,例如:
union traces, errors | project TIMESTAMP, message
模組
PowerShell 模組是自含且可重複使用的單元,其中包括各種元件,例如:
- Cmdlet:執行特定工作的個別命令。
- 提供者:允許存取資料存放區,例如登錄或檔案系統,就像它們是磁碟機一樣。
- 函式:可執行特定動作的可重複使用的程式碼區塊。
- 變數:在模組內儲存要使用的資料。
- 其他的資源類型。
模組可組織 PowerShell 程式碼,使其更易於散發。 例如,您可以建立自己的模組來封裝,並讓相關的功能更容易管理且可共用。 執行 PowerShell 程式碼動作可讓您匯入公用和私人 PowerShell 模組。
公用模組
若要尋找公開可用的模組,請瀏覽 PowerShell資源庫。 標準邏輯應用程式資源最多可支援 10 個公用模組。 若要使用任何公用模組,您必須遵循下列步驟來啟用此功能:
在 Azure 入口網站的邏輯應用程式側邊欄,在 開發工具下,選擇 進階工具。
在 [進階工具] 頁面上,選取 [執行]。
在 Kudu 工具列上,從 [偵錯主控台] 功能表中選取 [CMD]。
使用目錄結構或命令行,瀏覽至邏輯應用程式的根目錄:C:\home\site\wwwroot。
開啟工作流程的 host.json 檔案,並將 屬性設定
ManagedDependency.enabled為true,這個屬性預設已設定。"managedDependency": { "enabled": true }開啟名為 requirements.psd1 的檔案。 使用下列語法包含您想要之模組的名稱和版本:
MajorNumber.*或確切的模組版本,例如:@{ Az = '1.*' SqlServer = '21.1.18147' }
公用模組的考量
如果您使用相依性管理,則需要考慮以下事項:
若要下載模組,公用模組需要存取 PowerShell 資源庫。
受控相依性目前不支援需要您接受授權的模組,無論是以互動方式接受授權,還是在執行
-AcceptLicense時提供 選項。
私人模組
您可以產生自己的私人 PowerShell 模組。 若要建立您的第一個 PowerShell 模組,請參閱 撰寫 PowerShell 指令碼模組。
在 Azure 入口網站,在你的 Logic App 資源側邊欄,在開發工具下,選擇 進階工具。
在 [進階工具] 頁面上,選取 [執行]。
在 Kudu 工具列上,從 [偵錯主控台] 功能表中選取 [CMD]。
使用目錄結構或命令行,瀏覽至邏輯應用程式的根目錄:C:\home\site\wwwroot。
建立一個名為 Modules 的資料夾。
在 [模組] 資料夾中,建立與您的私人模組同名的子資料夾。
在你的私人模組資料夾裡,加入帶有 .psm1 副檔名的私人 PowerShell 模組檔。 你也可以附上一個可選的 PowerShell 清單檔案,副檔名是 .psd1 。
當您完成時,完整的邏輯應用程式檔案結構將類似於以下範例:
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指令。
執行 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# 指令碼