PowerShell,如何提供管道变量?

PowerShell, How to provide a pipe variable?

这是一个高级问题,因为我不在办公室而是在家里,所以细节可能不准确。

我有一个通过管道接受变量的函数:

get-csv | myfunc

管道源是 .csv 文件中的字段。

如何定义变量并通过管道输入myfunc()HashTable 会好吗?

$my_pipe_variables = @{ Color = ‘Red’; Doors = 4; Convertible = $false}
$my_pipe_variables | myfunc

这是正确的语法吗?

更新:

我终于开始尝试了,但它对我不起作用,因为我的 myfunc 直接通过 $_ 访问管道变量。这是演示:

function showThem { echo Color: $_.Color }

> [pscustomobject]@{ Color = ‘Red’; Doors = 4; Convertible = $false} | showThem
Color:

如何使其适用于直接通过 $_ 访问管道变量的 myfunc

Import-Csv(不是Get-Csv),用于从文件读取CSV数据,以及ConvertFrom-Csv,用于从字符串读取CSV数据,输出自定义对象的集合(类型 [pscustomobject] 其属性反映了 CSV 数据的列。

为了模拟Import-Csv/ConvertFrom-Csv输入,按需构建此类自定义对象,使用
[pscustomobject] @{ <propertyName>=<value>; ... } 语法 (PSv3+).

例如,模拟 2 行具有列 ColorDoors 的 CSV 数据, 和 Convertible:

[pscustomobject] @{ Color = 'Red'; Doors = 4; Convertible = $false },
[pscustomobject] @{ Color = 'Blue'; Doors = 5; Convertible = $false } |
  ...

另外,为了通过自动变量 $_ 使一个函数处理来自管道 一个对象一个对象 的输入,它必须有一个 process { ...} - 请参阅帮助主题 about_Functions

# Define the function body with a process { ... } block, which
# PowerShell automatically calls for each input object from the pipeline,
# reflected in automatic variable $_
function showThem { process { "Color: " + $_.Color } }

[pscustomobject] @{ Color = 'Red'; Doors = 4; Convertible = $false },
[pscustomobject] @{ Color = 'Blue'; Doors = 5; Convertible = $false } |
  showThem

注意:在PowerShell中,echoWrite-Output的别名,很少需要显式使用;相反,该函数依赖于 PowerShell 的 隐式输出 :字符串连接 (+) 的结果隐式成为函数的输出。

以上结果:

Color: Red
Color: Blue