Invoke-AsWorkflow

以 Windows PowerShell 工作流的形式运行命令或表达式。

语法

Invoke-AsWorkflow
      [-CommandName <String>]
      [-Parameter <Hashtable>]
      [-InputObject <Object>]
      [<CommonParameters>]
Invoke-AsWorkflow
      [-Expression <String>]
      [-InputObject <Object>]
      [<CommonParameters>]

说明

Invoke-AsWorkflow 工作流以内联脚本的形式运行任何命令或表达式。 这些工作流使用标准工作流语义,具有所有工作流通用参数,并且具有工作流的所有优势,包括停止、恢复和恢复的功能。

工作流专为收集关键数据的长时间运行的命令而设计,但可用于运行任何命令。 有关详细信息,请参阅 about_Workflows

还可以向此命令添加工作流通用参数。 有关工作流通用参数的详细信息,请参阅 about_WorkflowCommonParameters

此工作流在 Windows PowerShell 3.0 中引入。

示例

示例 1:将 cmdlet 作为工作流运行

Invoke-AsWorkflow -PSComputerName (Get-Content Servers.txt) -CommandName Get-ExecutionPolicy

PSComputerName                     PSSourceJobInstanceId                   Value
--------------                     ---------------------                   -----
Server01                           77b1cdf8-8226-4662-9067-cd2fa5c3b711    AllSigned
Server02                           a33542d7-3cdd-4339-ab99-0e7cd8e59462    Unrestricted
Server03                           279bac28-066a-4646-9497-8fcdcfe9757e    AllSigned
localhost                          0d858009-2cc4-47a4-a2e0-da17dc2883d0    RemoteSigned

此命令在数百台计算机上将 Get-ExecutionPolicy cmdlet 作为工作流运行。

该命令使用 CommandName 参数来指定工作流中运行的 cmdlet。 它使用 PSComputerName 工作流通用参数来指定运行命令的计算机。 PSComputerName 参数的值是一个 Get-Content 命令,用于从 Servers.txt 文件中获取计算机名称列表。 参数值括在括号中,以指示 Windows PowerShell 在使用该值之前运行 Get-Command 命令。

与所有远程命令一样,如果命令在本地计算机上运行(如果 PSComputerName 参数的值包括本地计算机),则必须使用“以管理员身份运行”选项启动 Windows PowerShell。

示例 2:使用参数运行 cmdlet

$s = Import-Csv .\Servers.csv -Header ServerName, ServerID
Invoke-AsWorkflow -CommandName Get-ExecutionPolicy -Parameter @{Scope="Process"} -PSComputerName {$s.ServerName} -PSConnectionRetryCount 5

第一个命令使用 Import-Csv cmdlet 从 Servers.csv 文件中的内容创建对象。 该命令使用 Header 参数为包含目标计算机名称(也称为“远程节点”)的列创建 ServerName 属性。该命令将结果保存在 $s 变量中。

第二个命令使用 Invoke-AsWorkflow 工作流在 Servers.csv 文件中的计算机上运行 Get-ExecutionPolicy 命令。 该命令使用 Invoke-AsWorkflowCommandName 参数指定要在工作流中运行的命令。 它使用 Invoke-AsWorkflowParameter 参数来指定 Get-ExecutionPolicy cmdlet 的 Scope 参数,其值为 Process。该命令还使用 PSConnectionRetryCount 工作流通用参数将命令限制为每个计算机上的五次尝试,PSComputerName 工作流公共参数指定远程节点(目标计算机)的名称。 PSComputerName 参数的值是一个表达式,用于获取 $s 变量中每个对象的 ServerName 属性。

这些命令在数百台计算机上以工作流的形式运行 Get-ExecutionPolicy 命令。 该命令使用 Get-ExecutionPolicy cmdlet 的 Scope 参数和 Process 的值来获取当前会话中的执行策略。

示例 3:将表达式作为工作流运行

Invoke-AsWorkflow -Expression "ipconfig /all" -PSComputerName (Get-Content DomainControllers.txt) -AsJob -JobName IPConfig

Id     Name          PSJobTypeName   State         HasMoreData   Location                Command
--     ----          -------------   -----         -----------   --------                -------
2      IpConfig      PSWorkflowJob   Completed     True          Server01, Server01...   Invoke-AsWorkflow

此命令使用 Invoke-AsWorkflow 工作流在 DomainControllers.txt 文件中列出的计算机上以工作流作业的形式运行 Ipconfig 命令。

该命令使用 Expression 参数指定要运行的表达式。 它使用 PSComputerName 工作流通用参数来指定远程节点(目标计算机)的名称。

该命令还使用 AsJobJobName 工作流通用参数,以使用“Ipconfig”作业名称在每台计算机上以后台作业的形式运行工作流。

该命令返回一个 ContainerParentJob 对象(System.Management.Automation.ContainerParentJob),该对象包含每台计算机上的工作流作业。

参数

-CommandName

将指定的 cmdlet 或高级函数作为工作流运行。 输入 cmdlet 或函数名称,例如 Update-HelpSet-ExecutionPolicySet-NetFirewallRule

类型:String
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-Expression

指定此 cmdlet 作为工作流运行的表达式。 以字符串形式输入表达式,例如 "ipconfig /all"。 如果表达式包含空格或特殊字符,请将表达式括在引号中。

类型:String
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-InputObject

用于允许管道输入。

类型:Object
Position:Named
默认值:None
必需:False
接受管道输入:True
接受通配符:False

-Parameter

指定 CommandName 参数中指定的命令的参数和参数值。 输入一个哈希表,其中每个键都是参数名称,其值是参数值,例如 @{ExecutionPolicy="AllSigned"}

有关哈希表的信息,请参阅 about_Hash_Tables

类型:Hashtable
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

输入

Object

可以通过管道将任何对象传递给此 cmdlet。

输出

None

此命令不返回自己的输出,但它运行的工作流可能会返回输出。