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

格式成员和成员[副本]

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

    我是PowerShell的新手,正在尝试从Hyper-V中获取VM名称及其相关IP地址的列表。

    我在屏幕上得到的信息很好,但当我尝试导出到csv时,我得到的IP地址只有 System.Collections.Generic.List`1[System.String] 在每条线上。

    有关于“联接”或“转换为CSV”的建议,但我不理解这些建议的语法。

    有人能帮忙吗?

    这是我使用的语法。。。

    Get-VM | Select -ExpandProperty VirtualNetworkAdapters | select name, IPV4Addresses | Export-Csv -Path "c:\Temp\VMIPs.csv"
    
    0 回复  |  直到 3 年前
        1
  •  2
  •   mklement0    6 年前

    如果您导出为CSV格式的对象 Export-Csv ConvertTo-Csv 包含以下内容的属性值 收集 (数组) 对于值,这些值是 通过他们的 .ToString() 方法 ,这会导致无用的表示,就像数组值的情况一样 .IPV4Addresses 财产。

    为了证明这一点,请使用 转换为Csv cmdlet(其工作原理与 导出Csv 但是 退货 CSV数据,而不是将其保存到文件中):

    PS> [pscustomobject] @{ col1 = 1; col2 = 2, 3 } | ConvertTo-Csv
    "col1","col2"
    "1","System.Object[]"
    

    也就是说,数组 2, 3 存储在 .col2 属性被字符串化是没有帮助的 System.Object[] ,这就是你打电话时得到的 .ToString() 在常规PowerShell阵列上;其他。NET集合类型-例如 [System.Collections.Generic.List[string]] 在你的例子中,用类似的方式串起来;也就是说,通过他们 类型名称 .


    假设您想在 单一的 CSV列,以解决此问题 你必须 决定一个有意义的字符串表示 对于整个收藏 并使用 Select-Object 用一个 calculated property :

    例如,您可以使用 -join 操作符创建一个以空格分隔的元素列表:

    PS> [pscustomobject] @{ col1 = 1; col2 = 2, 3 } | 
          Select-Object col1, @{ n='col2'; e={ $_.col2 -join ' ' } } |
            ConvertTo-Csv
    "col1","col2"
    "1","2 3"
    

    注意数组 2, 3 变成了绳子 '2 3' .

        2
  •  0
  •   Ernst    5 年前

    OtherObjectPipedStuff |选择对象名称、IPV4地址|导出csv PP.csv-无类型信息

    推荐文章