Use SNMP GetNext.

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

Этот монитор производительности проходит MIB hrStorageType для поиска жестких дисков в таблице хранилища. После нахождения жесткого диска он получает индексы и опрашивает новые объекты (размер хранилища и единицы измерения).

// Этот сценарий проходит hrStorageType для поиска жестких дисков в таблице хранилища.
// Жесткий диск как hrStorageType "1.3.6.1.2.1.25.2.1.4" (hrStorageFixedDisk).
// Затем он получает индексы жесткого диска в этой таблице и для каждого индекса опрашивает два новых
// объекта в этой таблице, размер хранилища и единицы измерения в этой записи.
// Он добавляет все эти данные и преобразует их в ГБ.
var hrStorageType = "1.3.6.1.2.1.25.2.3.1.2";

// Создать и инициализировать объект snmp
var oSnmpRqst = new ActiveXObject("CoreAsp.SnmpRqst");
var nDeviceID = Context.GetProperty("DeviceID");
var oResult = oSnmpRqst.Initialize(nDeviceID);

var arrIndexes = new Array(); // массив, содержащий индексы найденных дисков
// пройти столбец в таблице:
var oSnmpResponse = oSnmpRqst.GetNext(hrStorageType);
if (oSnmpResponse.Failed) Context.SetResult(1, oSnmpResponse.GetPayload);
var sOid = String(oSnmpResponse.GetOid);
var sPayload = String(oSnmpResponse.GetPayload);

while (!oSnmpResponse.Failed && sOid < (hrStorageType + ".99999999999"))
{
if (sPayload == "1.3.6.1.2.1.25.2.1.4") {
// Эта запись хранилища является диском, добавить индекс в таблицу.
// индекс — последний элемент OID:
var arrOid = sOid.split(".");
arrIndexes.push(arrOid[arrOid.length - 1]);
}

oSnmpResponse = oSnmpRqst.GetNext(sOid);
if (oSnmpResponse.Failed) Context.SetResult(1, oSnmpResponse.GetPayload);
sOid = String(oSnmpResponse.GetOid);
sPayload = String(oSnmpResponse.GetPayload);
}
Context.LogMessage("Найденные индексы дисков: " + arrIndexes.toString());
if (arrIndexes.length == 0) Context.SetResult(1, "Диски не найдены");

// теперь, когда есть индексы дисков. Опросить их использование и единицы измерения
var nTotalDiskSize = 0;
for (var i = 0; i < arrIndexes.length; i++) {

oSnmpResponse = oSnmpRqst.Get("1.3.6.1.2.1.25.2.3.1.5." + arrIndexes[i])
if (oSnmpResponse.Failed) Context.SetResult(1, oSnmpResponse.GetPayload);
nSize = oSnmpResponse.GetPayload;
oSnmpResponse = oSnmpRqst.Get("1.3.6.1.2.1.25.2.3.1.4." + arrIndexes[i])
if (oSnmpResponse.Failed) Context.SetResult(1, oSnmpResponse.GetPayload);
nUnits = oSnmpResponse.GetPayload;

nTotalDiskSize += (nSize * nUnits);
}
// вернуть общий размер в ГБ.
Context.SetValue(nTotalDiskSize / 1024 / 1024 / 1024); // вывод в ГБ

См. также

Пример мониторов производительности активного сценария

График потребления чернил на принтере

Опросить ссылочную переменную и провести расчет

Отобразить монитор температуры на графике

Опросить несколько ссылочных переменных