無効ユーザーアカウントアクティビティの確認

メモ この例は説明のために示されているに過ぎず、実際にはサポートされていません。Ipswitch は、Context オブジェクト、SNMP API、およびスクリプティング環境については、テクニカルサポートを提供しますが、JScript、VBScript、およびアクティブスクリプトのモニタとアクションの開発とデバッグについては、サポートを提供しません。この例および自社独自のスクリプトを作成することに関する援助については、WhatsUp Gold ユーザーコミュニティにアクセスしてください。

このアクティブモニタは、無効または予期しないユーザーアカウントがログインすると、デバイスの状態を停止に変えます。ログインしたアカウントが有効、予期されたものであれば、または誰もログインしていなければ、モニタは稼動し続けます。

sComputer = Context.GetProperty("Address")
nDeviceID = Context.GetProperty("DeviceID")

'ICMP がブロックされておらず、そのデバイスに対する Ping モニタがあるという想定で、
'実際のチェックを Ping モニタが稼動しているときのみに行うこととします。SWbemLocator の
'ConnectServer メソッドには長いタイムアウトがあるので、無用のトライを避けるのが懸命。
'以下の点に注意すること。デバイスに対するアクティブモニタのポーリング順は特に決まっていません。
'各ポーリングサイクル期間中に、Ping がポーリングされる前にこのモニタがポーリング
'されることもありえます。ネットワーク接続が落ちたばかりで、Ping がまだポーリングされていないため、
'状態がまだ稼働中のままになっているときでも、このアクティブモニタは実際にチェックを実行し、
'接続が実際に落ちていることがわかります。その後のポーリングでは、
'Ping モニタの状態は停止になっているので、実際のチェックは行われず (ConnectServer は呼び出されない)、
'モニタは停止しているものと想定されます。
If IsPingUp(nDeviceID) = false Then
Context.SetResult 1,"Actual check was not performed due to ping being down.Automatically set to down."
Else
sAdminName = Context.GetProperty("CredWindows:DomainAndUserid")
sAdminPasswd = Context.GetProperty("CredWindows:Password")
sLoginUser = GetCurrentLoginUser(sComputer, sAdminName, sAdminPasswd)
sExpectedUser = "administrator"

If Not IsNull(sLoginUser) Then
If instr(1,sLoginUser, sExpectedUser,1) > 0 Then
Context.SetResult 0,"Current login user is " & sLoginUser
ElseIf sLoginUser = " " Then
Context.SetResult 0,"No one is currently logged in."
Else
Context.SetResult 1,"an unexpected user " & sLoginUser & " has logged in " & sComputer
End If
End If
End If

'nDeviceID によって指定されている、そのデバイスに対する Ping モニタが稼動しているか確認します。
'検出中などの場合のように、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("The 1st try to connect to " & sComputer & " failed.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,"Failed to access " & sComputer & " " & _
"using username:"& sAdminName & " password."& " 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,"User Name:" & 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 アドレスの監視