about_Workflows
適用於: Windows PowerShell 3.0
主題
about_Workflows
簡短描述
提供 Windows PowerShell® 工作流程功能的簡介。
詳細描述
Windows PowerShell 工作流程會將 Windows Workflow Foundation 的優點提供給 Windows PowerShell,讓您可在 Windows PowerShell 中撰寫及執行工作流程。
Windows PowerShell 工作流程是在 Windows PowerShell 3.0 中引進。
如需 Windows PowerShell 工作流程的詳細資訊,請參閱 TechNet 文件庫中的<Windows PowerShell 工作流程簡介>,網址為 https://go.microsoft.com/fwlink/?LinkID=252592,以及 MSDN 文件庫中的<撰寫 Windows PowerShell 工作流程>,網址為 https://go.microsoft.com/fwlink/?LinkID=246399。
工作流程簡介
工作流程由相關活動已排序的命令所組成。它們通常長時間執行,對數百部電腦收集資料並進行變更,且通常是在異質環境中進行。
工作流程可以使用 XAML 撰寫,這是在 Windows Workflow Foundation 中使用的語言,或是使用 Windows PowerShell 語言撰寫。工作流程通常封裝在模組中,並包含說明主題。
因為它們可以重新開機之後存留下來,並自動從一般失敗中復原,所以工作流程在 IT 環境中相當重要。您可以從工作階段和執行工作流程的電腦中斷連線和重新連線,而不會中斷工作流程處理,也可以清楚地暫止和復原工作流程,而不會造成資料遺失。在工作流程中的每個活動都可加以記錄和稽核,以供參考。工作流程可以當做工作執行,也可使用 Windows PowerShell 的排程工作功能來排程。
會將工作流程中的狀態和資料儲存或「保存」在工作流程的開頭和結尾,以及在您指定的點。工作流程持續點的運作就像是資料庫快照集或程式檢查點,以避免工作流程因為中斷和失敗而受到影響。因工作流程無法復原而失敗時,您可以使用保存的資料並從上次保存點繼續,而不必從頭重新執行大量的工作流程。
需求和組態
Windows PowerShell 工作流程組態包含下列項目。
執行工作流程的用戶端電腦。
用戶端電腦或遠端電腦上的工作流程工作階段 (PSSession)。
受管理的節點,也就是會受到工作流程活動影響的目標電腦。
注意:
工作流程工作階段非必要,但建議要有。PSSessions 可利用 Windows PowerShell 之穩健的復原和中斷連線工作階段功能,修復中斷連線的工作流程工作階段。
因為用戶端電腦和執行工作流程工作階段的電腦可以是受管理的節點,所以您可以在符合所有角色的單一電腦上執行工作流程。
用戶端電腦和執行工作流程工作階段的電腦必須執行 Windows PowerShell 3.0。支援所有合格的系統,包括 Windows Server 作業系統的 Server Core 安裝選項。
若要執行包含 Cmdlet 的工作流程,則受管理的節點必須具有 Windows PowerShell 2.0 或更新版本。受管理的節點不需要有 Windows PowerShell,除非該工作流程包含 Cmdlet。您可以在沒有 Windows PowerShell 的電腦上,執行包含 Windows Management Instrumentation (WMI) 和通用訊息模型 (CIM) 命令的工作流程。
如需系統需求的詳細資訊,請參閱 TechNet 文件庫中的<Windows PowerShell 工作流程簡介>,網址為 https://go.microsoft.com/fwlink/?LinkId=252592。
如何取得工作流程
工作流程通常是在模組中封裝。若要匯入包含工作流程的模組,請在模組中使用任何命令或使用 Import-Module Cmdlet。在第一次使用該模組中的任何命令時,便會自動匯入模組。
若要尋找在電腦上已安裝模組中的工作流程,請使用 Get-Command Cmdlet 的 CommandType 參數。
PS C:\> Get-Command -CommandType Workflow
如何執行工作流程
若要執行工作流程,請使用下列程序。
1.在用戶端電腦上,使用 [以系統管理員身分執行] 選項啟動 Windows PowerShell。
PS C:\> Start-Process PowerShell -Verb RunAs
當受管理的節點是本機電腦時,就不需要此步驟。
2.在執行工作流程工作階段的電腦上,以及在受到包含 Cmdlet 之工作流程影響的受管理節點上,啟用 Windows PowerShell 遠端。
您只需要在每部參與的電腦上執行此步驟一次。
只有當執行包含 Cmdlet 的工作流程時,才需要此步驟。您不需要在執行 Windows PowerShell 3.0 的用戶端電腦 (除非工作流程工作階段要在用戶端電腦上執行) 或任何受管理的節點上啟用遠端。
若要啟用遠端,請使用 Enable-PSRemoting Cmdlet。
PS C:\> Enable-PSRemoting -Force
您也可以使用「開啟指令碼執行」群組原則設定來啟用遠端。如需詳細資訊,請參閱 about_Group_Policy_Settings (https://go.microsoft.com/fwlink/?LinkID=251696) 和 about_Execution_Policies(https://go.microsoft.com/fwlink/?LinkID=135170)。
3.建立工作流程工作階段。使用 New-PSWorkflowSession 或 New-PSSession Cmdlet。
New-PSWorkflowSession Cmdlet 啟動的工作階段,將使用目標電腦中內建的 Microsoft.PowerShell.Workflow 工作階段組態。這項工作階段組態包括指令碼、類型和格式檔案,以及專為工作流程設計的選項。
在本機電腦:
PS C:\> $ws = New-PSWorkflowSession
在遠端電腦:
PS C:\> $ws = New-PSWorkflowSession -ComputerName Server01 `
-Credential Domain01\Admin01
或者,使用 New-PSSession Cmdlet。您可以使用 ConfigurationName 參數來指定 Microsoft.PowerShell.Workflow 工作階段組態。這個命令就相當於使用 New-PSWorkflowSession Cmdlet。
如果您是在工作流程工作階段電腦上的 Administrators 群組成員,您也可以使用 New-PSWorkflowExecutionOption Cmdlet 來建立工作流程工作階段自訂設定,和使用 Set-PSSessionConfiguration Cmdlet 來變更工作階段組態。
PS C:\> $sto = New-PSWorkflowExecutionOption -MaxConnectedSessions 150
PS C:\> Invoke-Command -ComputerName Server01 `
{Set-PSSessionConfiguration Microsoft.PowerShell.Workflow `
-SessionTypeOption $Using:sto}
PS C:\> $ws = New-PSWorkflowSession -ComputerName Server01 `
-Credential Domain01\Admin01
4.在工作流程工作階段中執行工作流程。若要指定受管理節點 (目標電腦) 的名稱,請使用 PSComputerName 工作流程一般參數。
下列命令會執行 Test-Workflow 工作流程。
其中受管理的節點是裝載下列項目的電腦:
工作流程工作階段:
PS C:\> Invoke-Command -Session $ws {Test-Workflow}
其中受管理的節點是遠端電腦。
PS C:\> Invoke-Command -Session $ws{
Test-Workflow -PSComputerName Server01, Server02 }
下列命令會在數百部電腦上執行 Test-Workflow 工作流程。第一個命令會從文字檔取得電腦名稱,並將其儲存在本機電腦上的 $Servers 變數。
第二個命令會使用 Using 範圍修飾詞來表示 $Servers 變數已定義於本機工作階段。
PS C:\> $Servers = Get-Content Servers.txt
PS C:\> Invoke-Command -Session $ws {Test-Workflow -PSComputerName $Using:Servers }
如需 Using 範圍修飾詞的詳細資訊,請參閱 about_Remote_Variables,網址為 https://go.microsoft.com/fwlink/?LinkID=252653。
使用工作流程一般參數
工作流程一般參數是 Windows PowerShell 自動加入所有工作流程的一組參數。Windows PowerShell 也將 Cmdlet 的一般參數加入所有工作流程,即使該工作流程不使用 CmdletBinding 屬性亦同。
例如,下列非常簡單的工作流程不會定義任何參數。不過,當您執行工作流程時,它會具有 CommonParameters 和 WorkflowCommonParameters。
PS C:\> workflow Test-Workflow {Get-Process}
PS C:\> Get-Command Test-Workflow -Syntax
Test-Workflow [<WorkflowCommonParameters>] [<CommonParameters>]
工作流程一般參數包含數個執行工作流程不可或缺的參數。例如,PSComputerName 一般參數會指定受工作流程影響的受管理節點。
PS C:\> Invoke-Command -Session $ws `
{Test-Workflow -PSComputerName Server01, Server02}
PSPersist 工作流程一般參數會決定何時保存工作流程資料。它可讓您將活動之間的持續點加入不會定義持續點的工作流程。
PS C:\> Invoke-Command -Session $ws `
{Test-Workflow -PSComputerName Server01, Server02 -PSPersist:$True}
其他工作流程一般參數可讓您指定受管理節點之遠端連線的特性。其名稱與功能會非常類似於遠端 Cmdlet 的參數,包括 Invoke-Command。
PS C:\> Invoke-Command -Session $ws `
{Test-Workflow -PSComputerName Server01, Server02 -PSPort 443}
對於定義工作流程工作階段之連線的遠端參數,以及定義受管理節點之連線且有 PS 前置詞的工作流程一般參數,請小心區別這兩者。
PS C:\> $ws = New-PSSession -ComputerName Server01 `
-ConfigurationName Microsoft.PowerShell.Workflow
PS C:\> Invoke-Command -Session $ws `
{Test-Workflow -PSComputerName Server01, Server02 `
-PSConfigurationName Microsoft.PowerShell.Workflow}
某些工作流程一般參數對於工作流程是唯一的,例如可讓您指定不同遠端節點之不同工作流程一般參數值的 PSParameterCollection 參數。
如需工作流程一般參數的清單和描述,請參閱 about_WorkflowCommonParameters,網址為 https://go.microsoft.com/fwlink/?LinkID=222527。
另請參閱
Invoke-AsWorkflow
New-PSSessionExecutionOption
New-PSWorkflowSession
about_WorkflowCommonParameters
<開始使用 Windows PowerShell 工作流程>
(https://go.microsoft.com/fwlink/?LinkID=252592)
<撰寫 Windows PowerShell 工作流程>