Приветствую!
Возникли следующие 2 вопроса:
1. Если я на сервере отслеживаю состояние сервиса (например spooler) через System.ServiceState(spooler), то %1 всегда возвращает именно System.ServiceState(spooler). Можно ли каким-то образом получать только значение, заключённое в ()? т.е. в данном случае только само значение spooler.
2. вытекает из первого вопроса. если я хочу автоматически перезагружать сервис spooler, я
а) создаю Action на сервере: Reset My Service \ Execute action on remote agent\ %a \ ResetService
б) создаю запись в конфиге Агента: ActionShellExec = ResetService:sc stop spooler && sc start spooler
в) создаю привязку Action "Reset My Service" к Event "SYS_SERVICE_DOWN" через Event Processing Policy
г) создаю DCI и добавляю в свойства DCI параметр Threshold: Last polled value - Not equal - 0 - SYS_SERVICE_DOWN
а вот теперь собственно вопрос: если я хочу сделать Reset My Service универсальным Action для ЛЮБОГО сервиса, как мне модифицировать строку ActionShellExec = ResetService:sc stop spooler && sc start spooler
может быть так? ActionShellExec = ResetService:sc stop %1 && sc start %1
и вот тут всплывает первый вопрос: %1 - возвращает не только название сервиса "spooler", но так же содержит и метод проверки "System.ServiceState".
Прошу помочь.
:)
Могу предложить два варианта:
1. Сделать скрипт под названием, скажем, "extract_arg":
sub main()
{
if ($event->parameters[1] ~= ".*\((.*)\)")
return $1;
return "";
}
И вместо %1 использовать %[extract_arg]
2. Прописывать название сервиса в поле Instance и использовать %6 вместо %1.
И в том, и в другом варианте конфиг агента можно сделать как
ActionShellExec = ResetService:sc stop $1 && sc start $1
а в конфигурации action'a на сервере использовать соответственно
ResetService %[extract_arg]
или
ResetService %6