Один простой метод состоит в том, чтобы просто выполнить сниффера как tcpdump/wireshark на компьютере и отослать запрос DHCP. Если Вы видите какие-либо предложения другой затем с Вашего реального сервера DHCP затем, Вы знаете, что у Вас есть проблема.
Я делаю это как часть запланированного задания. Все запланированные задания, которые я выполняю, являются сценариями. Даже если это - графическое приложение, я запускаю его из .bat файла. Все сценарии включают проверку ошибок, и они используют osql для добавления строки к "контрольной таблице" задания. Затем один запрос на таблице говорит мне, какие задания, за которыми следуют, неудавшийся или (любезность левого соединения), не сообщили ни о каком состоянии. Я выполняю этот запрос как запланированное задание на моей собственной рабочей станции, и это отправляет мне по почте отчет.
МЛАДШИЙ
Проанализируйте вывод "schtasks" сами с помощью ADODB.
Вот немного программы VBScript, которая проанализирует вывод с предварительно сделанным, ЕСЛИ/ЗАТЕМ блоки для "Последнего Результата", не равного нулю и "Состоянию" как ", Не Могли Запуститься". Можно записать в так значительно большем количестве условий, как Вы любите и заменяете кодом в реагировать на состояние отказа однако, Вы хотите.
Option Explicit
' ADO Constants
Const adCmdText = 1
Const adLockOptimistic = 3
Const adOpenStatic = 3
' Path to text file and filename
Const FILEPATH = "C:\WINDOWS\TEMP" ' Don't append "\"
Const FILENAME = "tasks.csv"
Dim x, objShell, objConn, objRS, dictFields, Field
' Write output of schtasks to file
Set objShell = CreateObject("WScript.Shell")
objShell.Run "%COMSPEC% /c schtasks /query /fo csv /v > """ & FILEPATH & "\" & FILENAME & """", 1, True
' Connect recordset to CSV file
Set objConn = CreateObject("ADODB.Connection")
Set objRS = CreateObject("ADODB.Recordset")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FILEPATH & ";Extended Properties=""text;HDR=YES;FMT=CSVDelimited"""
objRS.Open "SELECT * FROM " & FILENAME, objConn, adOpenStatic, adLockOptimistic, adCmdText
' Load header into dictionary - Prefer to do this in case format changes in future version of Windows
Set dictFields = CreateObject("Scripting.Dictionary")
x = 0
For Each Field in objRS.Fields
dictFields.Add Ltrim(Rtrim(Field)), x
x = x + 1
Next ' Field
objRS.MoveNext
Do Until objRS.EOF
' Check last status for something other than 0
If objRS.Fields.Item(dictFields("Last Result")) <> 0 Then
WScript.Echo "Scheduled Task " & objRS.Fields.Item(dictFields("TaskName")) & " returned status of " & objRS.Fields.Item(dictFields("Last Result"))
End If
' Check "Status" for "Could Not Start"
If NOT IsNull(objRS.Fields.Item(dictFields("Status"))) Then
If UCase(objRS.Fields.Item(dictFields("Status"))) = "COULD NOT START" Then
WScript.Echo "Scheduled Task " & objRS.Fields.Item(dictFields("TaskName")) & " could not start"
End If
End If
objRS.MoveNext
Loop
Вы могли также изучить выполнение запланированной задачи / сервер сценария. Я использую AdTempus.
Можно также генерировать тонны отчетов и предупреждений. Можно даже генерировать схемы потока заданий.
Изменение строки в справке bat-файла?
Эхо, выводящее неудачные задачи, это выведет неудачное имя задачи и его код состояния
For /F "skip=2 Tokens=1-10 Delims=," %%A in ('schtasks /query /fo csv /v') do if %%G NEQ 0 Echo %%A --} %%G
Одна из проблем здесь заключается в том, что если задача не выполняется из-за того, что сервер подключен к сети, то любой мониторинг на этом сервере также не будет работать.
Проверьте https://cronitor.io. Это простая служба мониторинга для запланированных заданий и звучит так, как будто это именно то, что вы ищете.