代码之家  ›  专栏  ›  技术社区  ›  xpt

powershell,如何提供管道变量?

  •  0
  • xpt  · 技术社区  · 5 年前

    这是一个高层次的问题,因为细节可能不准确,因为我不在办公室,但在家。

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

    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公司 ,它直接通过 $_ 是吗?

    0 回复  |  直到 5 年前
        1
  •  3
  •   mklement0    5 年前

    Import-Csv (不是) Get-Csv ,用于从 文件 ,和 ConvertFrom-Csv ,用于从 一串 , 输出 自定义对象 (类型 [pscustomobject] ) 其属性反映csv数据的列。

    根据需要构造这样的自定义对象,以便 模拟 导入csv / 从csv转换 输入 使用
    [pscustomobject] @{ <propertyName>=<value>; ... } 语法(psv3+)。

    例如,用列模拟两行csv数据 Color 我是说, Doors , 和 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