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-AsWorkflow
的 Parameter
参数将 Get-ExecutionPolicy
的 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
工作流通用参数指定远程节点(目标计算机)的名称。
该命令还使用 AsJob
和 JobName
工作流通用参数,在每台计算机上将该工作流作为后台作业运行,作业名称为“Ipconfig”。
该命令返回一个 ContainerParentJob
对象(System.Management.Automation.ContainerParentJob
),该对象包含每台计算机上的工作流作业。
参数
-CommandName
将指定的 cmdlet 或高级函数运行为工作流。
输入 cmdlet 或函数名称,例如 Update-Help
、Set-ExecutionPolicy
或 Set-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 |
输入
你可以通过管道将任何对象传递给此 cmdlet。
输出
None
此命令不返回其自身的输出,但它运行的工作流可能会返回输出。