Azure 按重复名称添加值

Azure 按重复名称添加值,azure,powershell,azure-log-analytics,Azure,Powershell,Azure Log Analytics,我想使用powershell生成Azure日志分析查询 但我遇到了一个奇怪的问题。不确定原因,但它显示了少数虚拟机的重复条目 我的目标是为每个VM生成运行时间值报告。这是我的密码: $startime='2019-08-01'; $endtime='2019-08-31'; $queryResults=Invoke AzoOperationAlinsightsQuery-WorkspaceId“…”—Query“让开始时间=开始日期(日期时间($startime)); 让end_time=end

我想使用powershell生成Azure日志分析查询

但我遇到了一个奇怪的问题。不确定原因,但它显示了少数虚拟机的重复条目

我的目标是为每个VM生成运行时间值报告。这是我的密码:

$startime='2019-08-01';
$endtime='2019-08-31';
$queryResults=Invoke AzoOperationAlinsightsQuery-WorkspaceId“…”—Query“让开始时间=开始日期(日期时间($startime));
让end_time=endofday(datetime(“$endtime”);
心跳
|其中TimeGenerated>start\u time和TimeGenerated0,真,假)
|通过计算机汇总总可用小时数=计数(每小时可用小时数=真)
" 
$output=$QueryResults.Results | foreach对象{
[PSCustomObject]
@{
“VM名称”=($\计算机.split('..)[0]).ToUpper()
“虚拟机正常运行时间(以小时为单位)”=$\总可用小时数\u
}
}
$output
变量中,我看到了几个虚拟机的多个条目。删除重复项是很容易的,但是为了避免重复条目,我想对每个VM事件的up time值求和,但同时添加它们


发生重复的原因是,在查询结果中,某些VM同时显示w/out和具有不同启动时间值的FQDN,因此在foreach object命令中使用split命令。不知道为什么会这样。如果我误解了这个问题,请纠正我

根据你的代码,如果计算机1的名称是pc_1,而计算机2的名称是pc_1.azure.com,那么你认为它们是同一台计算机吗?所以你想把这两台计算机的正常运行时间加起来?就像pc_1正常运行时间是10,pc_1.azure.com正常运行时间是20一样,结果应该是vmName:pc_1=>正常运行时间:30?对吧?

如果是这样的话,你有两种方法来实现它。第一种方法是在kusto中重写查询,第二种方法是重写powershell代码

在这里,我只需通过拆分计算机名重新编写您的kusto查询,如下所示:

    let start_time=startofday(datetime('$startime'));
    let end_time=endofday(datetime('$endtime'));
    Heartbeat
    | where TimeGenerated > start_time and TimeGenerated < end_time
    | extend aa=split(Computer, ".")
    | extend bb=array_slice(aa, 0, 0)
    | extend my_Computer=strcat_array(bb,"") 
    | summarize heartbeat_per_hour=count() by bin_at(TimeGenerated, 1h, start_time), my_Computer
    | extend available_per_hour=iff(heartbeat_per_hour>0, true, false)
    | summarize total_available_hours=countif(available_per_hour==true) by my_Computer

您是否可以在$output中再次使用每个,然后对具有相同名称的vm求和时间?多台计算机在不同的域上是否具有相同的名称?e、 “MyComputer.domain1.com”和“MyComputer.domain2.com”?您的
($\u.Computer.split('.)[0]).ToUpper()
会将它们都简化为“MYCOMPUTER”。。。也许删除
拆分
并生成全名报告,看看重复项是否存在…@Ivan Yang我可以,但如何?我不知道如何编写一个条件,它将根据vm名称计算正常运行时间值。非常感谢您的帮助!我通过在powershell脚本中添加这一行来修复它:$output=$output | Group Object-Property“VM Name”| Select Object-unique Name,@{L=“VM Uptime(in Hours)”;E={($\ uu.Group | Measure Object-Property“VM Uptime(in Hours)”-Sum).Sum}
$output = $output | Group-Object -Property "VM Name" | Select-Object -unique Name, @{L="VM Uptime (in Hours)";E={($_.group | Measure-Object -Property "VM Uptime (in Hours)" -Sum).sum}}