powershell - 如何将 foreach-object 输出传递给接受管道输入的函数?
问题描述
据我了解,这是一个非常简单的问题。这里有很多类似的问题,但我无法准确找到我需要的东西。我错过了什么?
预期产出
1 2 3
实际输出(错误)
cmdlet ForEach-Object at command pipeline position 1
Supply values for the following parameters:
Process[0]:
代码
function processItem {
param($item)
Process {
$item
}
}
$collection = @(1,2,3)
$collection | foreach-object | processItem
解决方案
首先,您不必Foreach-Object
在此处使用,因为管道将直接打开包装$items
并将一个值一次发送到您的函数processItem
。
如果函数返回多个值,PowerShell 会将它们包装在一个数组中。但是,如果将结果传递给管道内的另一个函数,管道会自动“解包”数组并一次处理一个数组元素。
函数中的参数$item
不接受代码中的管道输入,您应该ValueFromPipeline
像这样使用:
function processItem {
param([parameter(ValueFromPipeline=$true)]$item)
Process {
$item
}
}
像这样使用:
$items = @(1, 2, 3)
$items | processItem
推荐阅读
- android - ListView onClick 没有显示适配器到 CardView 详细信息
- ios - 尝试使用在 SafariViewController 中启动链接的 tableviewcells 快速创建选项卡式应用程序
- c# - asp.net mvc + angularJs中的模块注册问题
- css - 有没有办法让这个下拉菜单看起来像一个表格?
- c# - 枚举类型不再在 .Net core 3.0 FromBody 请求对象中工作
- java - 读取带有波兰语字母的 ANSI 文件并在没有口音的控制台中显示
- android - adb“连接的设备列表”为空,用于远程 Debian 虚拟机上的 USB 连接
- asp.net - 在填充到 gridview 时修改 Eval("data")
- reactjs - 无法使用 nginx 在 ReactJS 应用程序中使用 CORS
- reactivesearch - 有没有办法有条件地渲染 ReactiveList