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 行具有列 Color
、Doors
的 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中,echo
是Write-Output
的别名,很少需要显式使用;相反,该函数依赖于 PowerShell 的 隐式输出 :字符串连接 (+
) 的结果隐式成为函数的输出。
以上结果:
Color: Red
Color: Blue
这是一个高级问题,因为我不在办公室而是在家里,所以细节可能不准确。
我有一个通过管道接受变量的函数:
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 行具有列 Color
、Doors
的 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中,echo
是Write-Output
的别名,很少需要显式使用;相反,该函数依赖于 PowerShell 的 隐式输出 :字符串连接 (+
) 的结果隐式成为函数的输出。
以上结果:
Color: Red
Color: Blue