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
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
工作流通用参数来指定远程节点(目标计算机)的名称。
该命令还使用 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
此命令不返回自己的输出,但它运行的工作流可能会返回输出。