我是PowerShell的新手,我目前遇到了一个问题。
我导入一个包含2列的CSV文件(ServerName和Size) 像这样:
Server | Size
-------------
SRV1 | 140
SRV2 | 120
SRV1 | 100
SRV1 | 140
SRV2 | 200
我想为每个服务器添加所有Size值,例如:
SRV2 = 120+200
SRV1 = 140+100+140
我不知道该怎么做。 我尝试使用for循环,但是每行都进行了操作,因此我的结果是错误的。 有谁可以帮助我?
答案 0 :(得分:2)
使用:
Group-Object
cmdlet按服务器名称(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
答案 1 :(得分:0)
以下是您可以执行此操作的示例:
$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)
}
}
您需要更改案例中的分隔符