gpt4 book ai didi

powershell - 将 Cmdlet 作为参数传递给 Function

转载 作者:行者123 更新时间:2023-12-02 23:12:33 28 4
gpt4 key购买 nike

关于传递函数有几个很好的答案

function pass_function([scriptblock] $func, [int] $a){
func.invoke($a)
}

如何传递接受管道输入的 Cmdlet?我有一个糟糕的解决方案

function pass_through([scriptblock]$command){
$command.invoke()
}

1,2,3,4 | pass_through { $input | Where { $_ -gt 1} }

输出 2、3、4。

从技术上讲,那里有足够的工具,但它们需要实现摆弄。我更愿意将Where 和{$_ -gt 1} 作为单独的参数传递。

如果对此没有很好的支持,那么这种语言解决类似问题的风格是什么?

最佳答案

看起来您正在寻找一种在管道中间更改命令的方法,而无需编写管道的另一个副本。您可以通过将 ScriptBlock 调用为 SteppablePipeline 来实现这一点。好的一点是,如果满足以下所有条件,Invoke-Command cmdlet 可以为您执行此操作:

  • Invoke-Command 需要管道输入。
  • ScriptBlock 没有直接引用 $input
  • ScriptBlock 可转换为 SteppablePipeline

这是Pass_Through函数:

function Pass_Through {
param(
[ScriptBlock]$MiddleCommand
)
$input|
Pre-Command|
Invoke-Command $MiddleCommand|
Post-Command
}

你可以像这样调用它:

1..10|Pass_Through {Where { $_ -gt 1}}

关于powershell - 将 Cmdlet 作为参数传递给 Function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33533891/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com