我是PowerShell的新手,我目前遇到了一个问题。
我导入一个包含2列(ServerName和Size)的CSV文件,如下所示:
Server | Size
-------------
SRV1 | 140
SRV2 | 120
SRV1 | 100
SRV1 | 140
SRV2 | 200
我想为每个服务器添加所有Size值,例如:
SRV2 = 120+200
SRV1 = 140+100+140
我不知道该怎么做。我尝试使用for循环,但是每行都进行了操作,因此我的结果是错误的。谁能帮助我?
使用:
Group-Object
cmdlet按服务器名称对CSV行进行分组(Server
)Select-Object
为每个组构造一个输出对象,Size
值的总和,通过使用calculated property的Measure-Object
cmdlet获得:Import-Csv file.csv | Group-Object Server |
Select-Object Name, @{ n='Size'; e={ ($_.Group | Measure-Object Size -Sum).Sum } }
如果您希望将第一个输出列命名为Server
,请将Name
替换为@{ n='Server'; e='Name' }
使用您的样本数据,上述产量:
Name Size
---- ----
SRV1 380
SRV2 320
这是一个如何做到的例子:
$Data = Import-Csv -Path "yourfilepath" -Delimiter ";"
$SortedData = $Data | Group {$_.server}
$Hashtable = @{}
$SortedData.group | ForEach-Object {
if ($Hashtable.Contains($_.server)) {
$Hashtable[$_.server] += ",$($_.size)"
} else {
$Hashtable.Add($_.server,$_.size)
}
}
在您的情况下,您需要更改分隔符