gpt4 book ai didi

function - 在 Powershell 高级函数中,如何检测 BEGIN block 中的管道输入?

转载 作者:行者123 更新时间:2023-12-03 00:22:17 25 4
gpt4 key购买 nike

我有高级功能

function Start-Executable {
[CmdletBinding()]
Param (
[String]$Arg1,
[String[]]$Arg2,
[Parameter(ValueFromPipeline=$true)][String[]]$PipeValue
)

Begin {
# Setup code
}
Process {
# What goes on here?
foreach ($val in $PipeValue) {
# Process val here
}
}
End {
}
}

在我的设置代码中,我需要根据用户是否提供管道输入来做一些不同的事情。但是我不知道如何在 BEGIN 块中判断是否有管道输入。有什么我可以检查的吗?

我尝试的另一件事是将设置代码放在 PROCESS 块中,在循环之前 $PipeValue ,但这不起作用,因为似乎每个管道值都会调用一次 PROCESS 块,使用 $PipeValue每次都是一个项目的数组。那正确吗?如果为每个值重复调用 PROCESS,为什么我需要在 PROCESS 块内进行另一个循环?

更新

澄清一下,我想要做的是在 BEGIN 中创建一个流程,在 PROCESS 中为其提供输入并在 END 中读取输出。为此,我需要设置 RedirectStandardInput$true如果有管道输入,否则没有。

作为变通方法,我可以让用户指定一个额外的参数(如果他们弄错了,事情就不起作用),或者我可以设置一个 $first_time BEGIN 中的标志,然后在第一次调用 PROCESS 时创建进程。如果我在没有创建进程的情况下到达 END,我会在那里创建它 RedirectStandardInput$false .这比我喜欢的代码重复要多,但如果这是唯一的选择,我可能不得不这样做。

最佳答案

$MyInvocation.ExpectingInput如果使用管道输入调用函数,则返回 true,否则返回 false。

这适用于 begin , process , 和 end块。它在 dynamicparam 中不起作用in PowerShell 5.1 or lower .

关于function - 在 Powershell 高级函数中,如何检测 BEGIN block 中的管道输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22687073/

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