about_Workflows
簡単な説明
PowerShell ワークフロー機能の簡単な概要について説明します。
詳細な説明
PowerShell ワークフローは、 Windows Workflow Foundation の利点を PowerShell にもたらし、ワークフローの作成と実行を可能にします。
PowerShell ワークフローは PowerShell 3.0 で導入され、モジュールは PowerShell 5.1 まで利用できます。 PowerShell ワークフローの詳細については、「ワークフロー ガイドおよび Windows PowerShell ワークフローの作成を参照してください。
ワークフローについて
ワークフローは、関連するアクティビティの順序付けられたシーケンスで構成されるコマンドです。 通常、これらは長時間実行され、何百ものコンピューターからデータを収集し、多くの場合、異種環境で変更を加えます。
ワークフローは、XAML、Windows Workflow Foundation で使用される言語、または PowerShell 言語で記述できます。 ワークフローは通常、モジュールにパッケージ化され、ヘルプ トピックが含まれます。 詳細については、「XAML の概要 (WPF)」を参照してください。
ワークフローは再起動後も存続し、一般的な障害から自動的に回復できるため、IT 環境では重要です。 ワークフロー処理を中断することなく、ワークフローを実行しているセッションやコンピューターから切断および再接続し、データを失うことなくワークフローを透過的に中断および再開できます。 ワークフロー内の各アクティビティは、参照のためにログに記録および監査できます。 ワークフローはジョブとして実行でき、PowerShell のスケジュールされたジョブ機能を使用してスケジュールできます。
ワークフロー内の状態とデータは、ワークフローの先頭と末尾、および指定した時点で保存または保持されます。 ワークフローの永続化ポイントは、データベース スナップショットやプログラム チェックポイントと同様に機能し、中断や障害の影響からワークフローを保護します。 ワークフローが障害から復旧できない場合は、最初から広範なワークフローを再実行するのではなく、永続化されたデータを使用し、最後の永続化ポイントから再開できます。
ワークフローの要件と構成
PowerShell ワークフローの構成は、次の要素で構成されます。
- ワークフローを実行するクライアント コンピューター。
- クライアント コンピューターまたはリモート コンピューター上のワークフロー セッション ( PSSession。
- マネージド ノード。ワークフロー アクティビティの影響を受けるターゲット コンピューター。
ワークフロー セッションは必須ではありませんが、推奨されます。 PSSessions は、PowerShell の堅牢な回復機能と切断セッション機能を利用して、切断されたワークフロー セッションを回復できます。 詳細については、 about_Remote_Disconnected_Sessionsを参照してください。
クライアント コンピューターとワークフロー セッションを実行するコンピューターは管理ノードにできるため、すべての役割を果たす 1 台のコンピューターでワークフローを実行できます。
クライアント コンピューターとワークフロー セッションを実行するコンピューターは、PowerShell 3.0 を実行している必要があります。 Windows Server オペレーティング システムの Server Core インストール オプションを含め、対象となるすべてのシステムがサポートされます。
コマンドレットを含むワークフローを実行するには、マネージド ノードに Windows PowerShell 2.0 以降が必要です。 ワークフローにコマンドレットが含まれていない限り、マネージド ノードには PowerShell は必要ありません。 PowerShell を持たないコンピューターで、Windows Management Instrumentation (WMI) コマンドと Common Information Model (CIM) コマンドを含むワークフローを実行できます。
ワークフローを取得する方法
通常、ワークフローはモジュールにパッケージ化されます。 ワークフローを含むモジュールをインポートするには、モジュール内の任意のコマンドを使用するか、 Import-Module
コマンドレットを使用します。
モジュールは、モジュール内のコマンドを最初に使用すると自動的にインポートされます。
コンピューターにインストールされているモジュール内のワークフローを検索するには、 Get-Command
コマンドレットの CommandType パラメーターを使用します。
Get-Command -CommandType Workflow
ワークフローを実行する方法
ワークフローを実行するには、次の手順に従います。
マネージド ノードがローカル コンピューターの場合、この手順は必要ありません。 それ以外の場合は、クライアント コンピューターで、[管理者として実行] オプションを使用して PowerShell を起動します。
Start-Process PowerShell -Verb RunAs
ワークフロー セッションを実行するコンピューターと、コマンドレットを含むワークフローの影響を受けるマネージド ノードで PowerShell リモート処理を有効にします。
この手順は、参加している各コンピューターで 1 回だけ行う必要があります。
この手順は、コマンドレットを含むワークフローを実行する場合にのみ必要です。 ワークフロー セッションがクライアント コンピューターまたは PowerShell 3.0 を実行しているマネージド ノードで実行されていない限り、クライアント コンピューターでリモート処理を有効にする必要はありません。
リモート処理を有効にするには、
Enable-PSRemoting
コマンドレットを使用します。Enable-PSRemoting -Force
リモート処理を有効にするには、 スクリプト実行時のターン グループ ポリシー設定を使用します。 詳細については、「 about_Group_Policy_Settings と about_Execution_Policies」を参照してください。
ワークフロー セッションを作成するには、
New-PSWorkflowSession
またはNew-PSSession
コマンドレットを使用します。New-PSWorkflowSession
コマンドレットは、対象コンピューターで組み込みの Microsoft.PowerShell.Workflow セッション構成を使用するセッションを開始します。 このセッション構成には、スクリプト、ファイルの種類と書式設定、ワークフロー用に設計されたオプションが含まれます。または、
New-PSSession
コマンドレットを使用します。 ConfigurationName パラメーターを使用して、Microsoft.PowerShell.Workflow セッション構成を指定します。 このコマンドは、New-PSWorkflowSession
コマンドレットの使用と同じです。別の方法として、
New-PSSession
コマンドレットを使用します。 ConfigurationName パラメーターを使用して、Microsoft.PowerShell.Workflow セッション構成を指定します。ローカル コンピューターで次の手順を実行します。
$ws = New-PSWorkflowSession
リモート コンピューターの場合:
$ws = New-PSWorkflowSession -ComputerName Server01 ` -Credential Domain01\Admin01
ワークフロー セッション コンピューターの管理者である場合は、
New-PSWorkflowExecutionOption
コマンドレットを使用して、ワークフロー セッション構成のカスタム オプション設定を作成できます。 また、Set-PSSessionConfiguration
コマンドレットを使用してセッション構成を変更します。$sto = New-PSWorkflowExecutionOption -MaxConnectedSessions 150 Invoke-Command -ComputerName Server01 ` {Set-PSSessionConfiguration Microsoft.PowerShell.Workflow ` -SessionTypeOption $Using:sto} $ws = New-PSWorkflowSession -ComputerName Server01 ` -Credential Domain01\Admin01
ワークフロー セッションでワークフローを実行します。 マネージド ノード、ターゲット コンピューターの名前を指定するには、 PSComputerName ワークフロー共通パラメーターを使用します。
次の例では、
Test-Workflow
という名前のワークフローを実行します。マネージド ノードは、ワークフロー セッションをホストするコンピューターです。
Invoke-Command -Session $ws {Test-Workflow}
マネージド ノードがリモート コンピューターである場所。
Invoke-Command -Session $ws{ Test-Workflow -PSComputerName Server01, Server02 }
次の例では、数百のコンピューターで
Test-Workflow
を実行します。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 では、ワークフローで 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
}
その他のワークフロー共通パラメーターを使用すると、マネージド ノードへのリモート接続の特性を指定できます。 名前と機能は、リモート処理コマンドレットのパラメーター ( Invoke-Command
など) に似ています。
Invoke-Command -Session $ws {
Test-Workflow -PSComputerName Server01, Server02 -PSPort 443
}
ワークフロー セッションの接続を定義するリモート処理パラメーターと、マネージド ノードへの接続を定義する PS-prefixed
ワークフロー共通パラメーターを区別するように注意してください。
$ws = New-PSSession -ComputerName Server01 -ConfigurationName Microsoft.PowerShell.Workflow
Invoke-Command -Session $ws {
Test-Workflow -PSComputerName Server01, Server02 -PSConfigurationName Microsoft.PowerShell.Workflow
}
ワークフロー共通パラメーターの中には、 PSParameterCollection パラメーターなど、ワークフローに固有のパラメーターがあります。このパラメーターを使用すると、異なるリモート ノードに対して異なるワークフロー共通パラメーター値を指定できます。 ワークフローの共通パラメーターの一覧と説明については、「 about_WorkflowCommonParameters」を参照してください。
関連項目
PowerShell