gpt4 book ai didi

Windows PowerShell - 要运行的数组

转载 作者:可可西里 更新时间:2023-11-01 14:51:33 25 4
gpt4 key购买 nike

我遇到了这个让我抓狂的问题:

我有一个类似的功能

function xyz
{
foreach($x in $input)
{
}
}

1..10 | xyz

这保存在文件 test.ps1 中。当我每次执行它时都像“.\test.ps1”那样

cmdlet Write-Output at command pipeline position 1
Supply values for the following parameters:
InputObject[0]:

为什么会这样?如果我喜欢它是行不通的

$myArray = @("a","b","c")
xyz -arr $myArray

并执行类似的功能

function xyz
{
param(
[string[]]$arr
)

foreach($x in $arr)
{
}
}

为什么?

最佳答案

我无法复制您看到的错误,但一般来说,当您想处理管道输入时,最简单的方法是这样的:

function xyz
{
process {
$_
}
}

1..10 | xyz

process block 将被管道中的每个对象调用。事实上,这是一个足够常见的模式,PowerShell 有一个更方便的快捷方式,称为 filter 例如:

filter xyz
{
$_
}

1..10 | xyz

现在,如果您需要处理常规参数以及管道输入,那么您需要添加一个参数声明并使用高级函数参数功能,例如:

function xyz
{
param(
[Parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true)]
[object[]]
$myparam
)
process {
foreach ($elem in $myparam)
{
$elem
}
}
}

xyz (1..10)
'a','b','c' | xyz

这适用于管道输入和简单参数(非管道)使用。这最接近地模拟了二进制 cmdlet 的实际工作方式。

关于Windows PowerShell - 要运行的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13747914/

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