我可以通过管道传递脚本块吗?例如,而不是
Invoke-Command -ScriptBlock {Get-Job}我可以(从概念上)做以下事情吗?
{Get-Job} | Invoke-Command -ScriptBlock $_发布于 2013-12-31 02:10:28
你当然可以。但是,$_ (又名$PSItem)在ForEach-Object或Where-Object等事物之外是无效的。所以你必须这么做:
# % is the default alias (short-hand) for ForEach-Object
{ Get-Process } | % { Invoke-Command -ScriptBlock $_; };您还可以传递一个$ScriptBlock对象数组,如下所示:
{ Get-Process }, { Start-Sleep -Seconds 2 }, { Get-ChildItem } | ForEach-Object -Process { Invoke-Command -ScriptBlock $PSItem; };注意前面的代码是如何:
-Process参数在ForEach-Object上是“第一个”参数,所以通常不必指定参数的名称。为了清晰起见,我在第二个示例中指定了完整的ForEach-Object cmdlet名称并添加了-Process参数名。
下面是一个我们声明Array of ScriptBlock对象的示例。然后,我们使用数组变量,将ScriptBlock对象包含到ForEach-Object中。这和上面的想法是一样的,但是分别声明数组。不过,请记住,如果您使用的是ForEach-Object,则必须使用-Process参数,而不是-Begin或-End参数,因为这些参数每次调用ForEach-Object时只运行一次。
$ScriptBlockList = @(
{ Get-Process; };
{ Start-Sleep -Seconds 5; };
{ Start-Job -ScriptBlock { Get-Process; }; };
);
$ScriptBlockList | ForEach-Object -Process { Invoke-Command -ScriptBlock $PSItem; };https://stackoverflow.com/questions/20850655
复制相似问题