Определение недопустимых действий учетной записи пользователя

Примечание Данный пример приводится в целях иллюстрации, он не поддерживается. Техническая поддержка доступна для контекстного объекта, SNMP API и среды сценариев, но Ipswitch не предоставляет поддержку по JScript, VBScript или разработке и отладке мониторов и действий активного сценария. Для помощи по этому примеру или по написанию собственных сценариев, посетите сообщество пользователей WhatsUp Gold.

Активный монитор изменит состояние устройства на "Неактивно" при входе с недопустимой или неожиданной учетной записью пользователя. Монитор останется в работоспособном состоянии при входе с допустимой учетной записью пользователя или при отсутствии входа.

sComputer = Context.GetProperty("Адрес")
nDeviceID = Context.GetProperty("ID устройства")

'Предположим, что ICMP не заблокирован и на устройстве есть монитор ping, при этом необходимо
'выполнить проверку, только если монитор Ping работает. Метод ConnectServer
'SWbemLocator имеет длительный тайм-аут, поэтому желательно избежать ненужных попыток.
'Обратите внимание: на активных мониторах устройства отсутствует определенный порядок опрашивания.
'В рамках каждого цикла опрашивания этот монитор может быть опрошен до опрашивания
'Ping. Если сетевое подключение уже отключено, а Ping еще не опрошен
'и поэтому все еще находится в работоспособном состоянии, этот активный монитор продолжает выполнять актуальную
'проверку и находит фактическое неактивное состояние. Но при последующих опросах он не будет выполнять
'актуальную проверку (ConnectServer не будет вызываться), поскольку монитор Ping находится в состоянии неактивности и этот монитор
'будет рассматриваться, как неактивный.
Если IsPingUp(nDeviceID) = false, то
Context.SetResult 1,"Актуальная проверка не выполнена, поскольку ping неактивен. Автоматический переход в неактивное состояние."
Else
sAdminName = Context.GetProperty("CredWindows:DomainAndUserid")
sAdminPasswd = Context.GetProperty("CredWindows:Password")
sLoginUser = GetCurrentLoginUser(sComputer, sAdminName, sAdminPasswd)
sExpectedUser = "администратор"

If Not IsNull(sLoginUser) Then
If instr(1,sLoginUser, sExpectedUser,1) > 0 Then
Context.SetResult 0,"Текущий вошедший пользователь " & sLoginUser
ElseIf sLoginUser = " " Then
Context.SetResult 0,"В настоящий момент никто не вошел."
Else
Context.SetResult 1,"неожиданный пользователь " & sLoginUser & " вошел " & sComputer
End If
End If
End If

'Проверить, работоспособен ли монитор Ping на устройстве, заданном с помощью nDeviceID.
'Если nDeviceID недоступен, как, например, при обнаружении, предположим, что
'ping активен.
'Если монитор ping отсутствует в устройстве, предположить, что он активен и выполнить актуальную
'проверку.
Function IsPingUp(nDeviceID)
If nDeviceID > -1 Then
'получить активное состояние монитора Ping.
sSqlGetUpState = "SELECT sStateName from PivotActiveMonitorTypeToDevice as P join " & _
"ActiveMonitorType as A on P.nActiveMonitorTypeID=A.nActiveMonitorTypeID " & _
"join MonitorState as M on P.nMonitorStateID = M.nMonitorStateID " & _
"where nDeviceID=" & nDeviceID & " and A.sMonitorTypeName='Ping' and " & _
" P.bRemoved=0"

Set oDBconn = Context.GetDB
Set oStateRS = CreateObject("ADODB.Recordset")
oStateRS.Open sSqlGetUpState,oDBconn,3

'если recordset пуст, то
If oStateRS.RecordCount = 1 Then
If instr(1,oStateRS("sStateName"),"up",1) > 0 Then
IsPingUp = true
Else
IsPingUP = false
End If
Else
'если ping в устройстве отсутствует, предположить, что он активен и выполнять регулярные проверки.
IsPingUp= true
End If

oStateRS.Close
oDBconn.Close
Set oStateRS = Nothing
Set oDBconn = Nothing

Else
'предположить, что активен, так как устройства отсутствуют. Сканирование в ходе обнаружения.
IsPingUP = true
End If
End Function

'Попытаться получить имя пользователя для текущей учетной записи.
Function GetCurrentLoginUser(sComputer, sAdminName, sAdminPasswd)
GetCurrentLoginUser=Null
Set oSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
On Error Resume Next
Set oSWbemServices = oSWbemLocator.ConnectServer _
(sComputer, "root\cimv2",sAdminName,sAdminPasswd)

If Err.Number <> 0 Then
Context.LogMessage("Первая попытка подключения к " & sComputer & " была безуспешной. Err:" & Err.Description)
Err.Clear
'Если заданное имя пользователя и пароль для подключения к WMI привели к ошибке,
'попытаться подключиться без имени пользователя и пароля. Невозможно указать имя пользователя
'и пароль при подключении к локальному компьютеру.
On Error Resume Next
Set oSWbemServices = oSWbemLocator.ConnectServer(sComputer, "root\cimv2")

If Err.Number <> 0 Then
Err.Clear
On Error Resume Next
Context.SetResult 1,"Ошибка доступа " & sComputer & " " & _
"с использованием имени пользователя:" & sAdminName & " пароль." & " Err: " & Err.Description
Exit Function
End If

End If

Set colSWbemObjectSet = oSWbemServices.InstancesOf("Win32_ComputerSystem")

For Each oSWbemObject In colSWbemObjectSet
On Error Resume Next
'Context.SetResult 0,"Имя пользователя: " & oSWbemObject.UserName & " at " & sComputer
sCurrentLoginUser = oSWbemObject.UserName
Err.Clear
Next

If Cstr(sCurrentLoginUser) ="" Then
GetCurrentLoginUser = " "
Else
GetCurrentLoginUser = sCurrentLoginUser
End If

Set oSWbemServices = Nothing
Set oSWbemLocator = Nothing

End Function

См. также

Пример активных мониторов активного сценария

Отслеживание уровня чернил принтера и его использования

Оповещение при выходе температуры за диапазон

Мониторинг использования полосы пропускания на интерфейсе

Мониторинг агента SNMP, работающего на нестандартном порте

Мониторинг неизвестных MAC-адресов