Застосування hta, windows it pro

Приблизно півтора роки тому я почав застосовувати для введення призначених для користувача даних сторінки HTML, в основному для того, щоб мати можливість маскувати набираються паролі. Оскільки я не є розробником веб-сторінок, це були найпростіші сторінки HTML.

Використання сторінок HTML цілком дозволяло вирішувати мої завдання, але через деякий час з'явилися виправлення для Microsoft Internet Explorer (IE) і пакети оновлень Windows, які порушили звичний хід роботи. Після установки цих виправлень і пакетів оновлень мої сценарії стали не такими зручними, як раніше, коли можна було просто запустити сценарій подвійним клацанням миші і відразу починати вводити дані. Тепер перед тим, як почати введення, потрібно ствердно відповісти на серію запрошень системи безпеки, інакше сторінка відмовлялася приймати вводяться користувачем дані. Треба було щось робити з тим, що тепер іменується активним контентом - в основному, сценаріями і компонентами ActiveX в коді HTML. Крім того, моїми сценаріями користувалися й інші адміністратори, і мені набридли дзвінки та електронні повідомлення через подібні неузгодженостей.

Вирішення цієї проблеми прийшло до мене, коли я в перший раз запустив новий Scriptomatic 2.0. Один з додатків мене дуже зацікавило. Воно було зроблено дуже стильно, але, головне, воно виконувалося без будь-яких питань з боку підсистеми безпеки. Я був вражений, що можна зробити за допомогою інтерфейсу HTA (HTML Application - додаток HTML).

основи HTA

Сценарії HTA, що з'явилися вперше в IE 5.0, були у свій час досить популярними. Але, на жаль, коли я починав розробляти сценарії адміністрування для Windows NT, я нічого не чув і не читав про них. По суті, сценарій HTA являє собою звичайну сторінку HTML з розширенням .hta, але при цьому сценарії HTA не схильні до суворим обмеженням і примусовим заходам безпеки, що застосовуються до сторінок HTML.

Створення HTA ​​вимагає певних навичок написання сценаріїв. Як правило, програмування в HTML використовується для створення екранних форм введення, при цьому програми на мові VBScript вставляються в код сторінки HTML. Зазвичай все зводиться до того, щоб ввести в форму введення даних кнопку, яка генерує подія onclick при натисканні на неї мишею. Іншими словами, після того, як користувач введе інформацію і клацне по кнопці, код на мові VBScript повинен спрацювати і виконати певну дію.

Якщо ви новачок в програмуванні на мові HTML (як спочатку це було зі мною), вам знадобиться зробити деякий дослідження ресурсів MSDN (Microsoft Developer Network). Там є безліч різноманітних прикладів і посилань, і, витративши кілька днів, ви зможете створювати дійсно корисні сценарії HTA.

Написання кодів HTML вручну і за допомогою спеціалізованих засобів розробки - це як ніч і день. Велика частина коду, а може і весь код, створюється автоматично, як ніби ви графічно створюєте свій екранний бланк для введення. Після створення формуляра треба вставити цей код в розділ сценарію і зберегти отриманий файл з розширенням .hta.

Зверніть особливу увагу: як будь-який додаток або сценарій, HTA може містити потенційну небезпеку, особливо, якщо приходить з невідомого або ненадійного джерела. Намагайтеся дотримуватися загального правила, що якщо ви отримуєте файли з невідомого джерела, не відчиняйте їх, а просто одразу ж видаляйте. Я користуюся сценаріями HTA тільки власного виробництва і передаю їх тільки людям, яких я знаю.

Аналізуємо сценарій HTA

На рисунку 1 показаний основний сценарій HTA, а на лістингу 1 - код, який створює цей сценарій. У коді HTML реалізується проста структура з елементів, що визначаються тегами. Більшість тегів є парними. Тег починає елемент, а тег закінчує цей елемент.

Як видно з лістингу 1, тег починає HTA, тег є його закінченням. Далі йде перший елемент інформації про документ. У цьому прикладі заголовок формуляра для введення і елементи вікна знаходяться між тегами і. Елемент HTA: APPLICATION (додаток HTA), який показує фрагмент A на лістингу 1, визначає вид форми для введення даних. В цьому випадку настройки елемента HTA: APPLICATION задають вікно призначеного для користувача інтерфейсу, в якому використовується тонка межа, параметр стиль кордону задається як sunken, кнопки Minimize і Maximize активізовані, і блокуються лінійка прокрутки і значок програми, тому вони не з'являються в панелі завдань.

При використанні атрибутів CAPTION і SYSMENU слід бути уважним. Якщо встановити їх неправильно, то форму буде неможливо закрити. Значення атрибута CAPTION рівне No. виключає рядок заголовка вікна програми. Якщо ще встановити атрибут SYSMENU рівним No. то будуть виключені кнопки Minimize, Maximize і Close. Так що, вирішивши встановити атрибути CAPTION або SYSMENU рівними No. переконайтеся в наявності кнопки Close на вашій сторінці.

При перевірці цього сценарію HTA я помітив, що якщо опустити всі ці атрибути HTA: APPLICATION і просто включити тег. то буде використано стандартні, причому вид їх цілком задовільний. Якщо ви хочете надати формі введення більш привабливий вигляд, то скористайтеся атрибутами HTA: APPLICATION, перерахованими в Таблиці 1. У таблиці наведені різні атрибути, їх можливі значення і значення за замовчуванням.

Фрагмент B в лістингу 1 показує елемент сценарію HTA, який починається тегом. Далі слід рядок language = attribute, де attribute визначає мову для створення сценарію, в даному випадку це VBScript. У цьому прикладі HTA, елемент сценарію містить просту підпрограму на мові VBScript, яка виконується, коли користувач клацне по кнопці для активізації сценарію Push this button to run script. Більше нічого особливого, але можна скопіювати будь-яку частину цього коду VBScript, яка знаходиться між тегами. і швидко отримати працюючий сценарій.

Останній розділ в лістингу 1 починається тегом. а закінчується тегом. Цей елемент містить код HTML, який створює форму, куди користувач вводить дані в поля і активізує кнопки. У прикладі HTA на рисунку 1 є два поля для введення даних: поле для введення звичайного тексту і поле для введення тексту пароля, який приховує будь-який текст, що вводиться користувачем. Є ще дві кнопки: одна запускає код на мові VBScript, інша закриває цей додаток.

Розглянемо уважніше елемент body. Фрагмент C показує код, який створює поле для звичайного тексту на рисунку 1. Тут тег

починає новий параграф, а тег

закінчує його. Теги та використовуються для завдання накреслення, розміру і кольору тексту. Якщо визначення цих параметрів не потрібно, і ви хочете скористатися стилем тексту за замовчуванням, то це буде гарнітура Times New Roman, колір чорний, розмір шрифту 3. Треба сказати, розміри шрифтів відрізняються від звичайних шрифтів, які використовуються, наприклад, в Microsoft Word. В HTML можна задати сім розмірів (від 1 до 7) за допомогою size = attribute, причому розмір 1 буде найменшим, а розмір 7 найбільшим. Навіть якщо HTA використовує розмір за замовчуванням, то код у фрагменті C встановлює розмір шрифту на 3 для слів в текстовому полі (Text box) і слів Use a text box for most any type of input (Скористайтеся текстовим полем для більшості типів введення) для демонстрації .

Елемент введення визначає поле введення, куди користувач може вводити дані. Рівність type = attribute визначає тип поля введення (наприклад поле для звичайного тексту, поле для пароля, звичайна кнопка, перемикач). В цьому випадку ви створюєте поле для звичайного тексту (type = "text"), яке має ім'я T1 (name = "T1") і розмір цього поля дорівнює 20 символам (size = "20"). Причому значення T1.value означає, як ви посилаєтеся на це текстове поле в вашому коді на мові VBScript. На відміну від більшості тегів тег не має кінцевого тега.

Код для поля введення тексту пароля має той же формат, що і код для поля введення звичайного тексту. Однак в цьому випадку, ви вказуєте "password", а не "text" в рівність type = attribute, в цьому випадку будь-який текст, що вводиться користувачем, буде прихованим.

Фрагмент D показує код, який створює кнопку Push this button to run script для запуску сценарію і кнопку виходу Exit. Обидві кнопки мають тип введення "button" (кнопка). Обидві кнопки також мають атрибут введення, який називається onclick. Атрибут onclick встановлюється для імені підпрограми, методу або іншого коду, який повинен активізуватися при натисканні мишею по кнопці. Для кнопки Push this button to run script. встановлюється onclick для підпрограми showsetting (показати настройки) - див. фрагмент B в лістингу 1. Ця підпрограма показує текст, який користувач вводить в поле Text box і в поле Password box. Текст, який користувачі вводять в поле Password, буде відображатися в незашифрованому тексті. Атрибут onclick кнопки виходу встановлюється на метод self.close (автоматичного закривання). Цей метод безпосередньо закриває HTA. Тут Self відноситься до поточного відчиненого вікна.

можливості безмежні

Цей приклад HTA показує лише малу частку того, чого можна домогтися в сценаріях HTA. Далі я маю намір представити сценарій HTA для призначення і перевірки квот користувачів на локальному і віддаленому комп'ютері.

структура HTA

Малюнок 2 показує утиліту за квотами користувача, User Quota Utility: Екран для введення інформації складається з чотирьох полів для введення інформації, одного списку, двох кнопок і двох текстових полів. Розглянемо ці компоненти і роботу самої утиліти.

Поля для введення інформації (input box). Перше поле для введення інформації призначене для введення списку ідентифікаторів користувачів, ID, для облікових записів користувачів, для яких необхідно змінити квоти. У другому полі для введення інформації користувачі вводять ім'я сервера або комп'ютера, на які поширюються квоти. Якщо це поле залишається порожнім, то за замовчуванням утиліта діє на локальній машині. Якщо зазначені ідентифікатори користувачів є облікові записи на іншому комп'ютері, то треба ввести домен або ім'я комп'ютера в третьому полі для введення інформації. Якщо це поле залишається порожнім, то за замовчуванням утиліта відноситься до локальної системі.

У четвертому полі для введення інформації користувачі вводять розмір квоти в байтах. Як видно з Рисунку 1, я ввів за замовчуванням розмір 5368709120, тобто 5 Гбайт, але ви можете встановити розмір, який вважаєте за потрібне. Якщо ви віддаєте перевагу вводити розмір квоти в байтах, мегабайтах або гігабайтах, то можна скористатися другим HTA (UserQuotaUtility2.hta), в якому реалізовані ці три можливості, як показано на рисунку 3.

Список, що розкривається (drop-down box). Список, що розкривається знаходиться прямо після другого текстового поля. Він дозволяє користувачеві вибрати потрібний диск F для комп'ютера, на якому діють квоти. Спадаюче вікно в цьому прикладі HTA має досить значний список букв накопичувачів. Значення за замовчуванням в наведеному сценарії HTA - дисковод C :.

Кнопки. Коли користувач клацне по першій кнопці Run Modify User Quotas (активізувати зміна квот користувача), то утиліта User Quota Utility спробує встановити зазначену квоту на вибрані системи. Це пов'язані з підпрограмою RunMod в розділі VBScript в цьому HTA, що показує Лістинг 2.

Друга кнопка, Run Quota Query - активізувати запит квоти, дає список квот для зазначеного сервера або накопичувача. Це пов'язані з підпрограмою RunQuery в розділі VBScript в цьому HTA. Ця програма не фільтрує ідентифікатори користувачів при запуску цієї підпрограми, воно перераховує всі налаштування за квотами користувачів для зазначеного комп'ютера або накопичувача. Навіть якщо користувач перерахував ідентифікатори користувачів в першому полі для введення інформації, активізація кнопки Run Quota Query призведе до того, що буде отримано інформацію про всі облікові записи на зазначеній системі, а не тільки про записи, перерахованих в списку.

аналіз HTA

Після установки програми, HTA включає розділ VBScript, см. Лістинг 2. Цей розділ містить три підпрограми: Window_Onload, RunMod і RunQuery.

Підпрограма Window_Onload. Підпрограма Window_Onload виконується автоматично при активізації цього додатка. Спочатку підпрограма використовує self.Focus () для запуску вікна програми попереду всіх інших відкритих вікон. Потім підпрограма налаштовує розміри вікна програми і встановлює розмір квоти за замовчуванням (qlimit.value).

Підпрограма RunMod. Підпрограма RunMod, яка асоційована з кнопкою Run Modify User Quotas, містить код для зміни квот користувача. Крім очищення значення поля Status (за допомогою оператора statval.value = "") цей код перевіряє наявність символів «повернення каретки» або «новий рядок» в кінці поля для введення ідентифікатора користувача, User ID. Символ «повернення каретки» або «новий рядок» потрібен для отримання закінчення ідентифікатора, тому якщо його немає, то код його додає. Підпрограма RunMod використовує функцію Split з роздільником vbcrlf для побудови масиву ідентифікаторів користувачів, який пізніше використовує HTA для встановлення цих квот.

Цей сценарій приписує значення з форми для введення інформації HTA змінним, які використовуються в сценарії. Цей сценарій використовує GetObject для пошуку екземпляра класу. Він використовує классWin32_DiskQuota як для підпрограми RunMod, так і для RunQuery, і використовує клас Win32_ComputerSystem для пошуку імені локального комп'ютера, коли користувач залишає поле введення домену порожнім.

Вся підпрограма RunMod дана у фрагменті A коду в лістингу 2. Тут підпрограма обробляє в циклі ідентифікатори користувачів, ID. Для кожного ID підпрограма знаходить спеціальну квоту користувача, встановлює і фіксує граничне значення за методом objQuota.Put_.

Підпрограма RunQuery. Підпрограма RunQuery, яка асоційована з кнопкою Run Query Quota button, починає з установки параметрів для введення значень. Потім RunQuery встановлює константи wbemFlagForwardOnly і wbemFlagReturnImmediately. Константа wbemFlagForwardOnly викликає сценарій для отримання односпрямованого лічильника, такі лічильники зазвичай працюють набагато швидше і використовують менше пам'яті, ніж у випадку звичайних лічильників. Константа wbemFlagReturnImmediately робить виклик для безпосереднього повернення.

Потім підпрограма RunQuery підключається через Windows Management Instrumentation (WMI) до сервера або комп'ютера, який вказав користувач, якщо це поле залишилося порожнім, то сценарій підключає до локального комп'ютера. Потім підпрограма використовує запит на мові WQL (WMI Query Language) для отримання наявної інформації про квоту, як показує код фрагмента B. У цьому запиті сценарій визначає константи wbemFlagForwardOnly і wbemFlagReturnImmediately. Якщо ви хочете зменшити число рядків в коді, то можна поєднати значення цих констант і задати їх десяткове значення рівним 48 - приклад цієї більш короткої версії у фрагменті A коду.

У запиті WQL параметр WQL необов'язковий. Фрагмент B коду використовує цей параметр, але якщо ви його не включаєте, треба поставити дві коми, між якими нічого немає, як показує оператор Set colItems фрагмента A. Краще все ж вказувати WQL, тому що його наявність вносить ясність, що це - оператор Select для використання WMI.

Після того, як RunQuery отримує дані про існуючі квоти, RunQuery показує всі отримані дані в великоформатної таблиці Microsoft Excel. Зауважте, що оскільки для класу Win32_DiskQuota немає властивості типу лічильник, підпрограма поміщає ініціалізацію Excel в цикл For Next і встановлює на мітку do_once. Якби властивість лічильника було б доступно, підпрограма могла б просто виконувати перевірку за умовою «значення більше нуля», тоді не треба було б ініціювати Excel і цикл For Next, якби не було результатів повернення за запитом.

Завершення коду. Розділ на мові VBScript в HTA також містить функцію ConvStatus, як показано у фрагменті C. Ця функція перетворює статус квоти з чисельного уявлення 0, 1 або 2 в значення OK, Warning або Exceeded, відповідно. Зверніть увагу, що код перевіряє помилки в ключових блоках програми VBScript. Цей код використовує err.description для виявлення генерованих системою помилок і потім показує їх в поле Status Box для HTA. Після розділу на мові VBScript файл HTA включає код для вікна введення.

Пишіть свої сценарії HTA.

Лістинг 1. Код для прикладу HTA на рисунку 1
Лістинг 2. Фрагмент утиліти User Quota Utility
Лістинг 3. htaexample.hta
Лістинг 4. htaexample2.hta

Схожі статті