Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Powershell检索Azure中警报的当前状态_Powershell_Azure_Azure Automation - Fatal编程技术网

如何使用Powershell检索Azure中警报的当前状态

如何使用Powershell检索Azure中警报的当前状态,powershell,azure,azure-automation,Powershell,Azure,Azure Automation,我正在编写一本Powershell runbook,它将扩展VM ScaleSet,直到解决Application Insights警报 为此,我需要在Powershell脚本中查询警报的状态,即如果警报已触发或已解决,则为否 我曾尝试使用Get-AzureRmAlertRule和Get-AzureRmAlertHistory,但这仅分别给出警报规则的禁用/启用状态,或对规则本身执行的操作,即更新规则或删除警报等 有没有办法简单地知道当前是否触发或解决了警报?所以我也在积极处理这个问题,并想与大

我正在编写一本Powershell runbook,它将扩展VM ScaleSet,直到解决Application Insights警报

为此,我需要在Powershell脚本中查询警报的状态,即如果警报已触发或已解决,则为否

我曾尝试使用Get-AzureRmAlertRule和Get-AzureRmAlertHistory,但这仅分别给出警报规则的禁用/启用状态,或对规则本身执行的操作,即更新规则或删除警报等


有没有办法简单地知道当前是否触发或解决了警报?

所以我也在积极处理这个问题,并想与大家分享我的发现

以下内容来自:

Get-AzureRmAlertHistory cmdlet可在警报被启用、禁用、激发、解析等时获取警报的历史记录

在处理这个命令时,我发现如果你不给它任何参数,它只会返回当天的历史记录;但是,当您使用-StartTime和-EndTime参数时,您可以从过去的其他地方获取警报的详细信息

虽然这不会在单个命令中给出警报的当前状态,但可以组合一些逻辑来获取给定时间范围内的最新警报并检查其状态

出于我的目的,这段代码使用从alert webhook调用的runbook检查同级警报的状态。因此,我可以根据webhook中提供的数据收集时间范围。我知道这不是一个适用于所有情况的完美解决方案,但至少它可以作为一个起点

注意:我使用的AzureRM.Insights模块的版本是3.2.1,根据您使用的模块版本的不同,其行为可能会有所不同

更新: 在继续编写代码的过程中,我发现使用-ResourceId参数进行过滤存在一些问题。为要查找历史记录的警报提供ResourceId时,它不会返回任何结果。据我所知,在使用Get-AzureRmAlertHistory cmdlet和-ResourceId参数时,当返回警报对象时,不会填充ResourceId。不过,我还是设法找到了两种方法让它发挥作用

在-ResourceId参数之前传入-DetailedOutput参数。结果表明,ResourceId填充在DetailedOutput中,并且可以在那里进行匹配;但是,如果您首先传入-ResourceId,cmdlet的行为就好像它在返回详细输出之前先对其求值一样

获取AzureRmAlertHistory-开始时间2018-01-16-结束时间2018-01-17-详细输出-资源ID$AlertResourceID

属性CorrelationId中包含ResourceId。使用Where对象语法,可以使用Regex匹配ResourceId

获取AzureRmAlertHistory-StartTime 2018-01-16-EndTime 2018-01-17 | Where Object{$\uuu.CorrelationId-匹配$AlertResourceID/Events/*}

现在您已经有了所需的记录,可以在-EventTimestamp属性上使用一个简单的Sort对象,并将结果分配给一个变量。然后,如果您引用了分配结果的变量的-1索引,它将为您提供最新的警报实例以及警报状态

$AlertHistory=Get AzureRmAlertHistory-StartTime 2018-01-16-EndTime 2018-01-17 |其中对象{$\.CorrelationId-匹配$AlertResourceID/Events/*}|排序对象-属性事件时间戳

$AlertHistory[-1]


是否尝试直接使用rest api?是的,但我找到的rest api端点只提供了与Powershell调用相同的信息。