Wykonuję ten kod:

$web = Invoke-WebRequest http://x.x.x.x:60210/CoreApi/api/Healthcheck
$web.tostring()

Odpowiedź w $web jest jak poniżej.

HealthStatus: DBConnectionsuccess: True EventStoreConnectionucesUccess: true UnpublinedEvents: 0 AzureBuskonicesUccess: True Brors: Brak

Muszę stworzyć alert dla stanu niepublikowane: [> 10]. Czy ktoś może mi pomóc z logiką dopasowania ciągów.

0
medinibster 17 luty 2017, 13:03

2 odpowiedzi

Najlepsza odpowiedź

Oto podstawowe rozwiązanie przy użyciu wyrażenia regularnego:

$output = 'HealthStatus:DBConnectionSuccess:True EventStoreConnectionSuccess:True UnpublishedEvents:11 AzureBusConnectionSuccess:True Errors:NONE'

$unpublishedEvents = 0

$regex = 'UnpublishedEvents:([0-9]+)'

$match = [regex]::match($output, $regex)
if ($match.Success)
{
  $unpublishedEvents = $match.Groups[1].Value
}

if ($unpublishedEvents -gt 10)
{
  Write-Host "Some alert! ($unpublishedEvents events)"
}
1
Daniel Brixen 17 luty 2017, 10:29

Możesz użyć wyrażenia regularnego z nazwaną grupą przechwytywania, aby to zrobić, tak jak:

$input = "HealthStatus:DBConnectionSuccess:True EventStoreConnectionSuccess:True UnpublishedEvents:20 AzureBusConnectionSuccess:True Errors:NONE"
$isMatch = $input -match "UnpublishedEvents:(?<UnpubEventCount>\d+)"
if ($isMatch)
{
    return $Matches.UnpubEventCount -gt 10
}
else
{
    Write-Error "UnpublishedEvents not found"
}

$Matches to zmienna "magiczna", która jest ustawiona podczas korzystania z operatora -match.

2
TToni 17 luty 2017, 10:28