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

Powershell从datatable更改输出对象名称

  •  1
  • ColinA  · 技术社区  · 2 年前

    我正在从一个数据表向一个数据库输出几个对象。csv文件,并希望更改对象名称。

    这很好:

    $dataset.tables[0] | select-object System.ItemName, System.ItemPathDisplay | Export-Csv -Path D:\SEARCH_RESULT.csv -NoTypeInformation
    

    不过我想改变体制。ItemName到SKU,并尝试了以下操作:

    $dataset.tables[0] | select-object @{N='SKU';E={$_.System.ItemName}}, System.ItemPathDisplay | Export-Csv -Path D:\SEARCH_RESULT.csv -NoTypeInformation
    

    这将提供正确的列标题,但为空行。所以尝试了这个方法,给出了行,但他们都说是系统。项目名称:

    $dataset.tables[0] | select-object @{N='SKU';E={$dataset.tables[0].Columns['SYSTEM.ITEMNAME']}}, System.ItemPathDisplay | Export-Csv -Path D:\SEARCH_RESULT.csv -NoTypeInformation
    

    很明显,我没有正确地引用对象。非常感谢您的帮助。

    1 回复  |  直到 2 年前
        1
  •  1
  •   mklement0    2 年前

    改变 $_.System.ItemName $_.'System.ItemName'

    你的房产名是 System.ItemName ,如果属性名称本身包含 . ,属性名称必须为 引用 -否则,PowerShell将其解释为 嵌套的 property access

    就是, $_.系统项目名称 在对象上查找属性 $_ 命名的 System 先是,然后是 ItemName 按第一财产的价值计算的财产;PowerShell默认为 $null 当访问不存在的属性时。

    将此与使用 系统项目名称 作为一个 论点 传递给(位置暗示) -Property 参数 Select-Object cmdlet,参数在哪里 总是 被解读为 仅有一个的 属性名称(无论是否引用)。
    换句话说: 选择对象 直接地 支持 嵌套的 财产访问,但你可以通过 calculated property ,就像你的方法一样。

    推荐文章