2017-02-17 16 views
0

Я исполняющего этот код:проверка содержимого URI с помощью PowerShell и оповещения для струнного матча

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

Отклик в $web, как показано ниже.

HealthStatus: DBConnectionSuccess: Правда EventStoreConnectionSuccess: True UnpublishedEvents: 0 AzureBusConnectionSuccess: True Ошибки: NONE

Мне нужно создать оповещение для условий UnpublishedEvents: [> 10]. Может ли кто-нибудь помочь мне с логикой совпадения строк.

ответ

1

Вот базовое решение, используя регулярное выражение:

$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)" 
} 
2

Вы можете использовать регулярное выражение с именем группы захвата, чтобы сделать это, например:

$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 является «волшебной» переменной, которая устанавливается при использовании оператора -match.

+0

Спасибо Тони. Это сработало. – medinibster