Задача: хочу написать html документ, в котором при помощи скрипта выяснить наличие и версию локального IIS.
Понятно, что можно сделать запрос к http://localhost:80/. Есть ли другие способы, без парсинга хидеров? Например, через ADSI?
Поиск в MSDN и здесь ничего не дал.
... << RSDN@Home 1.1.4 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Задача: хочу написать html документ, в котором при помощи скрипта выяснить наличие и версию локального IIS. S>Понятно, что можно сделать запрос к http://localhost:80/. Есть ли другие способы, без парсинга хидеров? Например, через ADSI? S>Поиск в MSDN и здесь ничего не дал.
Здравствуйте, Andir, Вы писали:
A>Можно просто обратится к управляющим COM для IIS. Информацию ищи в скриптах администрирования для IIS (в частности adsutil.vbs). Искать скрипты в %SystemRoot%/system32/iis*.vbs + intepub/wwwroot/adminscripts/*.vbs
Уже смотрел. A>http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iissdk/iis/using_iis_programmatic_administration.asp
Тоже смотрел. Все есть, про версию нету. A>вкратце, на JScript: A>// WSH + ADSI A>var obj = GetObject("IIS://localhost/W3SVC/Info"); A>WScript.Echo(obj.MajorIIsVersionNumber + "." + obj.MinorIIsVersionNumber)
Увы:
undefined.undefined
... << RSDN@Home 1.1.4 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Всё там есть Версия IIS храниться в метабазе, и запрашивать его надо оттуда. Основной интерфейс для этого "IIS://localhost/W3SVC/Info";
Метабаза для IIS 6.0 храниться в xml в %SystemRoot%/system32/inetsrv/metabase.xml. По сути всё управление сводиться к чтению и изменению метабазы. А запросы вида IIS://localhost/W3SVC/Info являются почти XPath для метабазы ...
A>>вкратце, на JScript: A>>// WSH + ADSI A>>var obj = GetObject("IIS://localhost/W3SVC/Info"); A>>WScript.Echo(obj.MajorIIsVersionNumber + "." + obj.MinorIIsVersionNumber) S>Увы: S>
undefined.undefined
Странно, у меня точно выдаёт 6.0 на запущенном сервере. Ты запускал из под WSH? А то если из под браузера, то там надо ActiveX юзать ... А про ADSI с ActiveX я не в курсе.
Во втором примере я чуть ошибся там не так
// это *.htm
<script>
var locatorObj = new ActiveXObject("WbemScripting.SWbemLocator");
var providerObj = locatorObj.ConnectServer("localhost", "root/MicrosoftIISv2");
var obj = providerObj.get("IIsWebInfo='W3SVC/Info'");
alert(obj.MajorIIsVersionNumber + "." + obj.MinorIIsVersionNumber );
</script>
Здравствуйте, Andir, Вы писали:
A>Странно, у меня точно выдаёт 6.0 на запущенном сервере. Ты запускал из под WSH? А то если из под браузера, то там надо ActiveX юзать ... А про ADSI с ActiveX я не в курсе.
Да, именно из-под WSH. Вариант на VBScript вместо undefined говорит Object does not support this property or method. Я думаю, дело в том, что у меня IIS 5.1. Надо уметь определять начиная с 5.0.
... << RSDN@Home 1.1.4 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Да, именно из-под WSH. Вариант на VBScript вместо undefined говорит Object does not support this property or method. Я думаю, дело в том, что у меня IIS 5.1. Надо уметь определять начиная с 5.0.
А второй пример?
Да я нашёл, что WMI IIS провайдер существует только начиная с шестой версии IIS. Однако просто WMI по идее должно работать, если найду поблизости IIS 5, то проверю.
Здравствуйте, Andir, Вы писали: A>Да я нашёл, что WMI IIS провайдер существует только начиная с шестой версии IIS. Однако просто WMI по идее должно работать, если найду поблизости IIS 5, то проверю.
Дело не в WMI. Просто у объекта Info нет никакого свойства MajorIIsVersionNumber.
Кстати, в MSDN по его поводу тоже ничего нет: http://msdn.microsoft.com/library/en-us/iissdk/iis/ref_prog_iaorefiwi.asp A>C Уважением, Andir!
... << RSDN@Home 1.1.4 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Задача: хочу написать html документ, в котором при помощи скрипта выяснить наличие и версию локального IIS. S>Понятно, что можно сделать запрос к http://localhost:80/. Есть ли другие способы, без парсинга хидеров? Например, через ADSI? S>Поиск в MSDN и здесь ничего не дал.
Здравствуйте, LeoKem, Вы писали:
LK>как то ты друг мой ситный хреново искал видимо! http://msdn.microsoft.com/library/en-us/iissdk/iis/ref_vbom_reqocsv.asp?frame=true тут все прекрасно объяснено!
Как-то ты друг мой ситный хреново читал видимо! С серверной-то стороны все что угодно можно узнать. Ты со стороны клиента это сделай. Вот у меня стоит локально иис. А в C:\temp лежит страничка со скриптом. И вот как этому скрипту узнать, есть ли IIS на localhost?
... << RSDN@Home 1.1.4 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, LeoKem, Вы писали:
LK>>как то ты друг мой ситный хреново искал видимо! http://msdn.microsoft.com/library/en-us/iissdk/iis/ref_vbom_reqocsv.asp?frame=true тут все прекрасно объяснено! S>Как-то ты друг мой ситный хреново читал видимо! С серверной-то стороны все что угодно можно узнать. Ты со стороны клиента это сделай. Вот у меня стоит локально иис. А в C:\temp лежит страничка со скриптом. И вот как этому скрипту узнать, есть ли IIS на localhost?
Здравствуйте, Sinclair, Вы писали:
A>>Да я нашёл, что WMI IIS провайдер существует только начиная с шестой версии IIS. Однако просто WMI по идее должно работать, если найду поблизости IIS 5, то проверю. S>Дело не в WMI. Просто у объекта Info нет никакого свойства MajorIIsVersionNumber. S>Кстати, в MSDN по его поводу тоже ничего нет: S>http://msdn.microsoft.com/library/en-us/iissdk/iis/ref_prog_iaorefiwi.asp
Ну тогда я сдаюсь, похоже что в метабазе (до IIS6) не храниться версии. Поэтому остаётся только либо из реестра читать, либо читать версию dll у сервиса IIS.
var shell = WScript.CreateObject("WScript.Shell");
var major = shell.RegRead("HKLM\\System\\CurrentControlSet\\Services\\W3SVC\\Parameters\\MajorVersion");
var minor = shell.RegRead("HKLM\\System\\CurrentControlSet\\Services\\W3SVC\\Parameters\\MinorVersion");
WScript.Echo(major + "." + minor);
Здравствуйте, LeoKem, Вы писали:
LK>в метабазе есть параметры с ID 1100, 1101, 1102
LK>для 5.0 LK>1101 — 5 LK>1102 — 0
LK>для 5.1 LK>1101 — 5 LK>1102 — 1
LK>для 6.0 LK>1101 — 6 LK>1102 — 0
LK>Очень похоже на то что это и есть инфа о версии
А как к ним обратиться по ID? Я прошу прощения за невежество, но здесь сказано, что это и есть Major/MinorVersionNumber. Я пробовал доступиться по имени (через ADSI) — хрен на рыло. Может, можно как-то по Internal ID в метабазу залезть?
... << RSDN@Home 1.1.4 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, LeoKem, Вы писали:
LK>>в метабазе есть параметры с ID 1100, 1101, 1102
LK>>для 5.0 LK>>1101 — 5 LK>>1102 — 0
LK>>для 5.1 LK>>1101 — 5 LK>>1102 — 1
LK>>для 6.0 LK>>1101 — 6 LK>>1102 — 0
LK>>Очень похоже на то что это и есть инфа о версии S>А как к ним обратиться по ID? Я прошу прощения за невежество, но здесь сказано, что это и есть Major/MinorVersionNumber. Я пробовал доступиться по имени (через ADSI) — хрен на рыло. Может, можно как-то по Internal ID в метабазу залезть?
в опчем диагноз заключается в том что 5.1 и более ранние версии не поддерживают Major/MinorVersionNumber ссылку к сожалению потерял. пытался найти метод как получить версию использую internal ID пока ни чего не вышло, если получится отпишу.
LK>>>для 5.0 LK>>>1101 — 5 LK>>>1102 — 0
LK>>>для 5.1 LK>>>1101 — 5 LK>>>1102 — 1
LK>>>для 6.0 LK>>>1101 — 6 LK>>>1102 — 0
LK>>>Очень похоже на то что это и есть инфа о версии S>>А как к ним обратиться по ID? Я прошу прощения за невежество, но здесь сказано, что это и есть Major/MinorVersionNumber. Я пробовал доступиться по имени (через ADSI) — хрен на рыло. Может, можно как-то по Internal ID в метабазу залезть?