This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
администрирование Любой системный администратор хотел бы получить легкий, компактный и универсальный инструмент, с помощью которого можно одновременно контролировать состояние всех принтеров текущего домена Microsoft Windows; получать исчерпывающую статистику по настройкам принтера; управлять принтерами домена и их очередями; получать доступ к веб-интерфейсу принтеров, при его наличии; осуществлять поиск доступных принтеров по одному из критериев: по названию, по размещению, по месторасположению устройства. Предлагается решение, созданное на основе ASP, особенностью которого является динамичность. Выбор ASP обусловлен его возможностью работать с OLE-объектами и требованием динамичности. Для воплощения данного решения была использована библиотека интерфейса службы активного каталога (Active Directory Service Interface – ADSI), которая позволяет управлять пространством имен Microsoft Windows 2000. ADSI выпущен в 1997 году корпорацией Microsoft. ADSI поддерживает пространства имен LDAP, WinNT, IIS, NDS. В работе используются пространства имен LDAP и WinNT. Пространство имен LDAP используется для чтения текущего домена, соответственно списка опубликованных в них принтеров и поля AD. Протокол WinNT используется для работы управления принтерами и очередями печати.
Файловая структура проекта Инструмент представляет сайт, точкой входа в который является страница на языке HTML. Сайт создан на основе окон (Frameset): файл default.htm делит окно браузера на два столбца. Текст файла default.htm (HTML): <TITLE>Ñïèñîê äîñòóïíûõ ñåòåâûõ ïðèíòåðîâ <META HTTP-EQUIV ="Content-Type" CONTENT="text/html; ↵ CHARSET=windows-1251">
Остальные страницы взаимосвязаны друг с другом и являются рекурсивными. Обе страницы написаны на ASP. Для создания обеих страниц был выбран VBScript. VBScript выбран потому, что является языком, поставляемым с Microsoft Windows; обладает необходимыми возможностями для реализации данного проекта, имеет простой синтаксис. Каждый из ASP-файлов состоит из трех частей, которые взаимосвязаны друг с другом: WinNT, LDAP, HTML.
LDAP В разделе LDAP рассмотрены следующие вопросы: определение доступного домена; построение запроса SQL; поиск опубликованных принтеров в AD; чтение полей принтеров.
№10(11), октябрь 2003
Определение имени текущего домена Название текущего домена определяется с помощью функции GetObject. Используя функцию GetObject, можго прочитать корень пространства имен, т.е. текущий домен. Пример определения текущего домена (VBScript): SET rootDSE_ = GetObject("LDAP://RootDSE") domain_ = "LDAP://" + rootDSE_.Get("defaultNamingContext")
Переменная domain_ имеет вид «dc=microsoft,dc=com», если домен «microsoft.com». Имя текущего домена, полученного с помощью протокола WinNT, нельзя использовать, поскольку с помощью протокола WinNT, можно получить только сокращенное имя домена (в данном случае «Microsoft»). При указании сокращенного имени в строке с SQL-запросом произойдет ошибка. В сообщении, которое выведет браузер, будет указано, что путь к базе ошибочен, и базу невозможно открыть.
Построение запроса SQL Запрос SQL используется для осуществления процедуры поиска объектов при заданном типе объекта. В общем случае запрос SQL выглядит следующим образом: SELECT ïîëå_1, ïîëå_2, …, ïîëå_n FROM ↵ “LDAP://dc=äîìåí_1,dc=äîìåí_2…,domen_n” ↵ WHERE objectClass=’òèï_îáúåêòà’
В поле SELECT указываются поля, по которым идет выборка. Поля перечисляются через запятую, «пробелы» после запятой обязательны. Полный список полей объектов AD можно получить с помощью утилиты ADSI Edit, которая размещается в дистрибутиве Microsoft Windows 2000 в директории /Support/Tools. В поле FROM указывается путь к объекту. В данном случае известен только домен. Пробелы в данном поле недопустимы. В поле WHERE указывается тип объекта, к которому адресован запрос. Данное поле является фильтром. Протокол LDAP имеет несколько типов объектов, которые в запросе SQL определяются переменной objectClass: PrintQueue – массив принтеров, опубликованных в AD; Group – группы, созданные в AD; User – пользователи, созданные в AD; Computer – массив компьютеров, зарегистрированных в AD. Пример использования запроса SQL см. в разделе «Поиск опубликованных принтеров в AD».
«Поиск опубликованных принтеров в AD» Для поиска объектов в AD с помощью протокола LDAP используется ADODB-соединение. После создания соединения формируется SQL-запрос и осуществляется поиск в соответствии с запросом. Результатом поиска является массив, который содержит значения полей, указаных в параметре SELECT SQL-запроса. Затем происходит вывод данных на экран. В приведенном примере осуществляется поиск всех опубликованных принтеров в текущем домене и вывод на экран названия принтера и его сетевого имени (VBScript):
39
администрирование Set objConnection = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.CommandTimeout = 120 objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider" Set objCommand.ActiveConnection = objConnection objCommand.CommandText = "SELECT printername, printsharename ↵ FROM '"&domain_&"' WHERE object" objCommand.properties("Timeout")=30 objCommand.properties("Cache Results")=false Set st = objCommand.Execute st.Movefirst On Error Resume Next Do Until st.EOF printer_name=St.Fields("PrinterName").Value shares_enum="" shares=St.Fields("printsharename").Value for each share in shares shares_enum=shares_enum+share next Response.write printer_name & shares_enum & chr(13) st.MoveNext Loop
В Active Directory объектом класса printQueue является принтер. Данный объект имеет свойства, значение которых может быть двух типов: строкой и массивом. В приведенном примере значение, содержащее название принтера, является строкой, содержащее сетевые имена принтеров, является массивом. Ниже приведена таблица, с названиями часто используемых полей, соответствующий им тип данных, описание полей и общий формат данных, находящихся в этих полях:
WinNT С помощью протокола WinNT осуществляется подключение к локальному принтеру; чтение настроек и параметров принтера; управление принтером; чтение и управление очередью печати принтера.
Подключение к локальному принтеру Для подключения к принтеру в текущем домене необходимо знать два параметра – название компьютера, к которому подключен принтер, и название принтера. Поскольку принтеры сетевые, то имя компьютера, к которому подключены принтеры, является именем сервера печати (Print Server). Именем принтера является его сетевое имя (Share Name). Оба эти параметра определяются с помощью протокола LDAP. Синтаксис строки подключения в общем виде выглядит следующим образом: Set pq = GetObject("WinNT://" & server_name & "/" ↵ & shares_enum)
где serve_name – имя сервера печати, а shares_enum – сетевое имя принтера. Для получения доступа ко всем доступным принтерам и их очередям печати протокол WinNT совместно используется с протоколом LDAP (VBScript): Set st=objconnection.execute("SELECT shortservername, ↵ printsharename, FROM '" & Domain_ & " ' ↵ WHERE object" ) Do Until st.EOF shares_enum="" shares=St.Fields("printsharename").Value for each share in shares shares_enum=shares_enum & share next server_name=St.Fields("ShortServerNAme").Value Set pq = GetObject("WinNT://" & server_name & "/" ↵ & shares_enum) st.MoveNext Loop
Чтение настроек и параметров принтера Чтение настроек с помощью протокола WinNT осуществляется с помощью элементов массива объекта, вызванного с помощью функции GetObject : Set pq = GetObject("WinNT://" & server_name & "/" ↵ & shares_enum) pq.name
40
администрирование В приведенном примере name является членом массива pq. По типу данных членом массива могут быть строки и массивы. Выше приведены часто используемые элементы массива, соответствующие элементам типы данных и описания элементов:
Управление очередью осуществляется тем же способом, что и управление принтером. Существует три команды, которые могут быть использованы для управления документом, находящимся в очереди печати:
Управление принтером Управление принтером также осуществляется с помощью элементов массива объекта, вызванного с помощью функции GetObject. Элементы массива содержат не только строки и массивы, но и команды:
Приведем пример использования одной из команд (VBScript): Set pq = GetObject("WinNT://" & server_name & "/" ↵ & shares_enum) pq.purge
Чтение и управление очередью печати принтера Очередь печати представляет собой массив, содержащий в себе задания, которые находятся в очереди печати на момент извлечения из нее данных с помощью протокола WinNT. Массив очереди печати является элементом массива, получаемого с помощью функции GetObject. Он содержит элементы, список которых приведен в таблице. Все элементы представляют собой строки:
Пример, в котором удаляется второе задание из очереди печати. Если такого нет, то ошибка обрабатывается с помощью выражения «On Error Resume Next» (VBScript): On Error Resume Next Set pq = GetObject("WinNT://" & server_name & "/" ↵ & shares_enum) For Each printJob In pq.PrintJobs If (number_docum=2) then printJob.remove end if number_docum=number_docum Next
HTML Раздел HTML обеспечивает применение таблицы стилей и установку необходимой таблицы кодировки шрифта для графического оформления проекта, автоматическое обновление страниц; взаимодействие страниц, основанное на передаче форм с помощью метода POST; поиск по заданным критериям.
Таблица стилей и выбор кодировки страницы Обе ASP-страницы используют таблицу стилей и работают в кодировке WIN-1251. Стили описываются в подключаемом файле style.css: H4 {font-size:11; font-family:Arial;} H5 {font-size:10; font-family:Arial;} H6 {font-size:9; font-family:Arial;}
Файл стилей указывается в разделе LINK, необходимая кодировка – в разделе META (HTML):
Пример, в котором читаются поля и выводятся на экран (ASP): Set pq = GetObject("WinNT://" & server_name & "/" ↵ & shares_enum) For Each printJob In pq.PrintJobs status_pre=printJob.status select case status_pre case "0" status_="Íîðìàëüíî" case "1" status_="Ïàóçà" case "18" status_="Îøèáêà" end select number_docum=number_docum summary = summary & ”Íîìåð äîêóìåòà: ” & number_docum ↵ & chr(13) & chr(13) & ”Ñòàòóñ: ” & status_pre & ↵ chr(13) & ”Ïðèîðèòåò: ” & printJob.Description & ↵ chr(13) & ”Ïîëüçîâàòåëü: ” & printJob.User & chr(13) & ↵ ”Âñåãî ñòð. ” & printJob.TotalPages & chr(13) & ↵ ”Ðàçìåð, (Mb) ” & round(printJob.Size/1000000,2) & ↵ chr(13) & ”Ñòàòóñ: ” & status_pre & chr(13) & chr(13) Next Wscript.Echo summary
Параметр CHARSET отвечает за выбор кодировки, в которой будет отображаться документ.
Автоматическое обновление страниц Особенностью проекта является его динамичность, которая достигается автоматическим обновлением страниц через определенный промежуток времени. Обновление обеих страниц происходит с частотой, которая указывается пользователем. Определение времени автоматического обновления является эвристической операцией. Рекомендуется использовать время автоматического обновления от 5 до 10 секунд. Время обновления указывается в разделе META (HTML): < META HTTP-EQUIV ="refresh" CONTENT=10 >
41
администрирование Параметр CONTENT отвечает за временной интервал обновления страниц. Время указывается в секундах.
Взаимодействие страниц Взаимодействие страниц основано на передаче форм, содержащих данные, методом GET. Передача данных осуществляется с помощью двух методов: прямого и косвенного. Прямой метод: В исходной странице создается форма, которая содержит поля для ввода информации и кнопку для отправки информации и загрузки страницы, принимающей данные (HTML):
В разделе FORM присутствуют следующие параметры: ACTION, TARGET, METHOD. В параметре ACTION указывается файл, в который будут передаваться данные после нажатия на кнопку. Подразделом, который обязательно присутствует в разделе FORM, является INPUT. INPUT имеет следующие параметры: TYPE, NAME, VALUE. Параметр TYPE определяет вид приемника информации: кнопка (TYPE=«submit» или «reset»); окно для ввода текста (TYPE=«text»), значение по умолчанию; кнопка выбора одного параметра из группы (TYPE=«radio»). VALUE – название поля, отображаемое в объекте. NAME – имя, которое участвует в формировании запроса. Запрос, который формируется с помощью метода GET, в общем виде выглядит следующим образом: http://èìÿ_ñòðàíèöà.asp(htm)?Ï1=Ç1&Ï2=Ç2&...Ïn=Çn
В приведенной строке присутствуют следующие обозначения: П – параметр, З – значение. В используемом примере данная стока будет выглядеть следующим образом: http://printer_adsi.asp?Search_Text=HP
если в стоке было введено «HP». Рассмотрим «страницу-приемник»: для получения переданных принимающей странице данных необходимо прочитать запрос и присвоить переданные значения переменным. Данная операция, опираясь на приведенный пример, осуществляется следующим образом: set s_p_r= Request.QueryString(«Search_Text»)
Таким образом, параметр s_p_r=«HP». Прямой метод используется для осуществления поиска. Косвенный метод: Косвенный метод используется для передачи данных из одной ASP-страницы в другую. Он основан на том, что
42
при нажатии пользователем на картинку или текст, являющийся ссылкой, сразу формируется запрос, который передает данные. Поскольку очередью принтера невозможно управлять, если принтер рассматривать как сетевое устройство, то использование протокола LDAP становится невозможным. Для доступа к очереди принтера, как ранее отмечалось, используется протокол WinNT. Для использования протокола необходимо передавать 2 параметра: сетевое имя принтера (Share Name) и название окна (Frame), в котором необходимо вывести данную страницу. Опираясь на приведенные ранее примеры, данные будут передаваться на страницу View_Printer.asp, запрос будет иметь следующий вид (ASP):
Из-за особенностей ASP необходимо прибегать к обозначению кавычек функцией chr(34). Подробнее о передаче данных будет рассказано в разделе, посвященном WinNT.
Поиск по заданным критериям Поиск базируется на использовании фильтра. Перед осуществлением поиска пользователь выбирает критерий поиска, словосочетание для поиска и нажимает кнопку «Поиск», которая формирует запрос и загружает страницу. В качестве критерия может быть выбран один из параметров: «Название», «Описание», «Размещение». По умолчанию принято значение «Название». Выбор значения по умолчанию осуществляется меткой CHECKED в соответствующем разделе INPUT. Форма на странице-отправителе выглядит следующим образом (HTML): Íàçâàíèå < INPUT TYPE="radio" VALUE="2" NAME="radGrp">Îïèñàíèå < INPUT TYPE ="radio" VALUE="3" NAME="radGrp">Ðàçìåùåíèå
Если, например, осуществляется поиск всех устройств, которые встречают в названии словосочетание «hp», то формируется следующий запрос: http://printer_adsi.asp?Search_Text=hp&radGrp=1
В принимающем запрос файле printer_adsi.asp для расшифровки запроса используется следующая методика: данные, переданные форме, присваиваются переменным; происходит фильтрация данных в зависимости от параметра, отвечающего за критерий поиска; происходит поиск в соответствующих полях; вывод результатов поиска на экран.
администрирование
Установка сайта и особенности конфигурирования IIS Созданный сайт необходимо опубликовать с помощью IIS на любом компьютере домена, принтеры которого вы хотите инспектировать. Желательно, чтобы этим компьютером был компьютер, который функционирует круглосуточно. Таким компьютером является сервер. Данный сайт работает с Active Directory. Поскольку для чтения AD необходимы права администратора, то сайт будет работать только в случае его использования системным администратором. Необходимо иметь возможность просматривать сайт с любого компьютера в домене без перерегистрации пользователя. Для достижения желаемого результата необходимо назначить следующие права доступа на папку, в которой опубликован сайт: группе «Domain Admins» необходимо предоставить уровень доступа «Full Control» на папку с сайтом; остальные группы и пользователи должны быть удалены (см. рисунок 1). В настройке IIS для данного сайта в его свойствах необходимо, как показано на рисунке 3, войти во вкладку «Authentication Methods», нажав на кнопку «Edit». Затем выключить анонимный доступ (Anonnymos access), убрав галку напротив соответствующей записи. В разделе «Authenticated access» необходимо установить галку только напротив «Basic authentication».
Ðèñóíîê 1.
Ðèñóíîê 2. Èëëþñòðàöèÿ ñâîéñòâ ïðèíòåðà è î÷åðåäè ïå÷àòè
№10(11), октябрь 2003
43
администрирование невозможен по неизвестным причинам. Рекомендуется не ставить эту галку.
Желательно включить «Integrated Windows authentication» для того, чтобы системному администратору, который вошел в сеть под своей учетной записью, не предлагалось вводить пароль. Однако этот механизм доступа к сайту