首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过管道传递scriptblock

通过管道传递scriptblock
EN

Stack Overflow用户
提问于 2013-12-31 02:09:02
回答 1查看 1.4K关注 0票数 3

我可以通过管道传递脚本块吗?例如,而不是

代码语言:javascript
复制
Invoke-Command -ScriptBlock {Get-Job}

我可以(从概念上)做以下事情吗?

代码语言:javascript
复制
{Get-Job} | Invoke-Command -ScriptBlock $_
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-31 02:10:28

你当然可以。但是,$_ (又名$PSItem)在ForEach-ObjectWhere-Object等事物之外是无效的。所以你必须这么做:

代码语言:javascript
复制
# % is the default alias (short-hand) for ForEach-Object
{ Get-Process } | % { Invoke-Command -ScriptBlock $_; };

您还可以传递一个$ScriptBlock对象数组,如下所示:

代码语言:javascript
复制
{ Get-Process }, { Start-Sleep -Seconds 2 }, { Get-ChildItem } | ForEach-Object -Process { Invoke-Command -ScriptBlock $PSItem; };

注意前面的代码是如何:

  1. 获取进程列表。
  2. 睡两(2)秒
  3. 获取当前路径下的子项列表。

-Process参数在ForEach-Object上是“第一个”参数,所以通常不必指定参数的名称。为了清晰起见,我在第二个示例中指定了完整的ForEach-Object cmdlet名称并添加了-Process参数名。

下面是一个我们声明Array of ScriptBlock对象的示例。然后,我们使用数组变量,将ScriptBlock对象包含到ForEach-Object中。这和上面的想法是一样的,但是分别声明数组。不过,请记住,如果您使用的是ForEach-Object,则必须使用-Process参数,而不是-Begin-End参数,因为这些参数每次调用ForEach-Object时只运行一次。

代码语言:javascript
复制
$ScriptBlockList = @(
    { Get-Process; };
    { Start-Sleep -Seconds 5; };
    { Start-Job -ScriptBlock { Get-Process; }; };
    );

$ScriptBlockList | ForEach-Object -Process { Invoke-Command -ScriptBlock $PSItem; };
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20850655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档