【发布时间】:2021-12-23 11:29:59
【问题描述】:
我有点坚持分组和导出具有日常机器状态重复值的 csv 列。每台机器只有两个重复值。
hostname status
ABC up
DEF up
GHI down
ABC down
DEF up
GHI up
我希望得到
hostname status_morning status_evening
ABC up down
DEF up up
GHI down up
$groups = import-csv .\machine-status.csv | group-object hostname
foreach($group in $groups){
Select-Object @{Name='Hostname' ;Expression={$_.Values[0]}},
@{Name='status_morning';Expression={$_.Values[1]}},
@{Name='status_evening' ;Expression={$_.Values[2]}}
}
【问题讨论】:
-
你需要一些东西进入选择对象;也许
$group.group | Select-Object ... -
你可以从
group-object->group-object hostname | select-object ...通过管道进入Select-Object。您不需要foreach语句。您的表达式将从Group属性中检索数据。所以分别使用$_.Group[0].Hostname、$_.Group[0].Status和$_.Group[1].status。 -
能否保证
GroupInfo集合保持任何已知的顺序?如何确保status_morning和status_evening按预期顺序分组?是否有机会看到任何主机的第三个条目? -
@AdminOfThings.. 我得到了下面的
import-csv .\host.csv | group-object hostname | Select-Object $_.Group[0].Hostname Cannot index into a null array. At line:1 char:1 + import-csv .\hoist.csv | group-object hostname | Select-Object $_.Gr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : NullArray -
@stringfellow .. 主机条目将只有两个重复的主机条目,第一个是早上状态,最后一个是晚上状态。