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-AsWorkflow 的 CommandName 参数,以指定要在工作流中运行的命令。 它使用 Invoke-AsWorkflowParameter 参数将 Get-ExecutionPolicyScope 参数的值指定为 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

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Expression

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

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

用于允许管道输入。

Type:Object
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Parameter

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

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

Type:Hashtable
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

输入

Object

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

输出

None

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