about_Workflows

簡短描述

提供PowerShell工作流程功能的簡短簡介。

詳細描述

PowerShell 工作流程可為 PowerShell 帶來 Windows Workflow Foundation 的優點,並可讓您撰寫和執行工作流程。

PowerShell 工作流程是在PowerShell 3.0中引進,模組最多可使用PowerShell 5.1。 如需 PowerShell 工作流程的詳細資訊,請參閱 工作流程指南 和 撰寫 Windows PowerShell 工作流程。

關於工作流程

工作流程是由相關活動的排序順序所組成的命令。 一般而言,它們會長時間執行、收集數據,並在異質環境中經常對數百部計算機進行變更。

工作流程可以用 XAML 撰寫、Windows Workflow Foundation 中使用的語言,或以 PowerShell 語言撰寫。 工作流程通常會封裝在模組中,並包含說明主題。 如需詳細資訊,請參閱 XAML 概觀 (WPF)。

工作流程在IT環境中非常重要,因為它們可以在重新啟動後倖存下來,並自動從常見失敗中復原。 您可以在不中斷工作流程處理的情況下中斷會話和計算機之間的連線並重新連線,並以透明方式暫停和繼續工作流程,而不會遺失數據。 工作流程中的每個活動都可以記錄和稽核以供參考。 工作流程可以以作業的形式執行,而且可以使用PowerShell的[排程工作]功能來排程。

工作流程中的狀態和數據會儲存或保存在工作流程的開頭和結尾,以及您指定的時間點。 工作流程持續性點的運作類似資料庫快照集或程式檢查點,以保護工作流程免於中斷和失敗的影響。 如果工作流程無法從失敗中復原,您可以使用保存的數據並從最後一個持續性點繼續,而不是從頭重新執行廣泛的工作流程。

工作流程需求和設定

PowerShell 工作流程組態包含下列元素:

  • 執行工作流程的用戶端電腦。
  • 用戶端電腦或遠端電腦上的工作流程會話 PSSession。
  • 受管理節點,受工作流程活動影響的目標計算機。

不需要工作流程會話,但建議使用。 PSSession 可以利用PowerShell的強固復原和已中斷連線的會話功能來復原中斷連線的工作流程會話。 如需詳細資訊,請參閱 about_Remote_Disconnected_Sessions

因為用戶端電腦和執行工作流程會話的計算機可以是受控節點,因此您可以在滿足所有角色的單一計算機上執行工作流程。

執行工作流程會話的用戶端計算機和計算機必須執行 PowerShell 3.0。 支援所有合格的系統,包括 Windows Server 作業系統的 Server Core 安裝選項。

若要執行包含 Cmdlet 的工作流程,受控節點必須具有 Windows PowerShell 2.0 或更新版本。 除非工作流程包含 Cmdlet,否則受控節點不需要 PowerShell。 您可以在沒有 PowerShell 的電腦上執行包含 Windows Management Instrumentation (WMI) 和 Common Information Model (CIM) 命令的工作流程。

如何取得工作流程

工作流程通常會封裝在模組中。 若要匯入包含工作流程的模組,請使用模組中的任何命令或使用 Import-Module Cmdlet。 模組會在模組中第一次使用任何命令時自動匯入。

若要在計算機上安裝的模組中尋找工作流程,請使用 Get-Command Cmdlet 的 CommandType 參數。

Get-Command -CommandType Workflow

如何執行工作流程

若要執行工作流程,請使用下列程式。

  1. 當受控節點是本機計算機時,不需要此步驟。 否則,在用戶端電腦上,使用 [以系統管理員身分執行] 選項啟動 PowerShell。

    Start-Process PowerShell -Verb RunAs
    
  2. 在執行工作流程會話和受包含 Cmdlet 之工作流程影響的受控節點上啟用 PowerShell 遠端處理。

    您只需要在每個參與電腦上執行此步驟一次。

    只有在執行包含 Cmdlet 的工作流程時,才需要此步驟。 除非工作流程會話是在用戶端計算機上執行,或是在執行 PowerShell 3.0 的任何受控節點上執行,否則您不需要在用戶端電腦上啟用遠端功能。

    若要啟用遠端處理,請使用 Enable-PSRemoting Cmdlet。

    Enable-PSRemoting -Force
    

    您可以使用 [開啟文稿執行組策略] 設定來啟用遠端功能。 如需詳細資訊,請參閱 about_Group_Policy_Settings 和 about_Execution_Policies。

  3. New-PSWorkflowSession使用 或 New-PSSession Cmdlet 來建立工作流程會話。

    Cmdlet 會 New-PSWorkflowSession 啟動會話,該會話會使用目的地計算機上的內 建 Microsoft.PowerShell.Workflow 會話組態。 此工作階段設定包含文稿、類型和格式化檔案,以及專為工作流程設計的選項。

    或者,使用 New-PSSession Cmdlet。 使用 ConfigurationName 參數來指定 Microsoft.PowerShell.Workflow 會話設定。 此命令與使用 New-PSWorkflowSession Cmdlet 相同。

    替代方法是使用 New-PSSession Cmdlet。 使用 ConfigurationName 參數來指定 Microsoft.PowerShell.Workflow 會話設定。

    在本機電腦上:

    $ws = New-PSWorkflowSession
    

    在遠端電腦上:

    $newPSWorkflowSessionSplat = @{
     ComputerName = 'Server01'
     Credential = 'Domain01\Admin01'
    }
    $ws = New-PSWorkflowSession @newPSWorkflowSessionSplat
    

    如果您是工作流程會話電腦上的系統管理員,您可以使用 New-PSWorkflowExecutionOption Cmdlet 來建立工作流程會話組態的自定義選項設定。 而且,使用 Set-PSSessionConfiguration Cmdlet 來變更會話設定。

    $newPSWorkflowExecutionOptionSplat = @{
        MaxConnectedSessions = 150
    }
    $sto = New-PSWorkflowExecutionOption @newPSWorkflowExecutionOptionSplat
    $invokeCommandSplat = @{
        ComputerName = 'Server01'
        ScriptBlock = {
          Set-PSSessionConfiguration Microsoft.PowerShell.Workflow -SessionTypeOption $Using:sto
       }
    }
    Invoke-Command @invokeCommandSplat
    $newPSWorkflowSessionSplat = @{
       ComputerName = 'Server01'
       Credential = 'Domain01\Admin01'
    }
    $ws = New-PSWorkflowSession @newPSWorkflowSessionSplat
    
  4. 在工作流程會話中執行工作流程。 若要指定受控節點的名稱,請以計算機為目標,請使用 PSComputerName 工作流程通用參數。

    下列範例會執行名為 Test-Workflow的工作流程。

    其中受控節點是裝載工作流程會話的計算機:

    Invoke-Command -Session $ws {Test-Workflow}
    

    其中受管理節點是遠端電腦。

    Invoke-Command -Session $ws{
    Test-Workflow -PSComputerName Server01, Server02 }
    

    下列範例會在數百部電腦上執行 Test-Workflow 。 Cmdlet Get-Content 會從文本檔取得計算機名稱,並將其儲存在 $Servers 本機計算機上的變數中。

    Invoke-Command 會 Using: 使用範圍修飾詞在本機會話中定義 $Servers 變數。 如需範圍修飾詞的詳細資訊 Using: ,請參閱 about_Remote_Variables。

    $Servers = Get-Content Servers.txt
    Invoke-Command -Session $ws {Test-Workflow -PSComputerName $Using:Servers }
    

使用工作流程一般參數

工作流程通用參數是一組參數,PowerShell 會自動新增至所有工作流程。 PowerShell 會將 Cmdlet 通用參數新增至所有工作流程,即使工作流程未使用 CmdletBinding 屬性也一樣。

例如,下列工作流程不會定義任何參數。 不過,當您執行工作流程時,它同時 具有 CommonParameters 和 WorkflowCommonParameters。

workflow Test-Workflow {Get-Process}
Get-Command Test-Workflow -Syntax
Test-Workflow [<WorkflowCommonParameters>] [<CommonParameters>]

工作流程一般參數包含數個執行工作流程不可或缺的參數。 例如, PSComputerName 通用參數會指定工作流程所影響之受控節點。

Invoke-Command -Session $ws {
  Test-Workflow -PSComputerName Server01, Server02
}

PSPersist 工作流程一般參數決定工作流程數據保存時間。 它可讓您將活動之間的持續性點新增至未定義持續性點的工作流程。

Invoke-Command -Session $ws {
  Test-Workflow -PSComputerName Server01, Server02 -PSPersist:$true
}

其他工作流程通用參數可讓您指定與受控節點遠端連線的特性。 其名稱與功能類似於遠端 Cmdlet 的參數,包括 Invoke-Command。

Invoke-Command -Session $ws {
  Test-Workflow -PSComputerName Server01, Server02 -PSPort 443
}

請小心區分定義工作流程會話連線的遠端參數,以及 PS-prefixed 定義與受控節點連線的工作流程通用參數。

$newPSSessionSplat = @{
    ComputerName = 'Server01'
    ConfigurationName = 'Microsoft.PowerShell.Workflow'
}
$ws = New-PSSession @newPSSessionSplat

Invoke-Command -Session $ws {
  $testWorkflowSplat = @{
    PSComputerName = 'Server01', 'Server02'
    PSConfigurationName = 'Microsoft.PowerShell.Workflow'
  }
  Test-Workflow @testWorkflowSplat
}

某些工作流程通用參數對工作流程而言是唯一的,例如 PSParameterCollection 參數,可讓您為不同的遠端節點指定不同的工作流程通用參數值。 如需工作流程一般參數的清單和描述,請參閱 about_WorkflowCommonParameters。

另請參閱