.

Компоненты COM

Для того чтобы разобраться в структуре файла формата WSC, необходимо иметь базовые представления о том, что такое компоненты COM. COM - это одна из тех основных технологий, благодаря которым сценарии WSH являются столь полезным инструментом. Сценарий WSH может использовать хост-компоненты COM для получения доступа к тем функциям, которые сам язык сценариев реализовать не может. Например, язык VBScript сам по себе не предоставляет каких-либо возможностей для доступа к файловой системе, однако для работы с файлами в VBScript можно использовать СОМ-компонент Scripting.FileSystemObject. Таким образом, при реализации практических задач администрирования, сценарии WSH в полной мере задействуют компоненты COM.

Вы можете сами создавать полнофункциональные компоненты COM непосредственно в тексте сценария. Разработка собственных компонентов - это очень удобный способ создания отдельных объектов, которые в дальнейшем могут свободно использоваться в других сценариях, а также в других языках программирования, поддерживающих технологию COM, таких как Visual Basic (VB).

Файлы WSC

Как было отмечено выше, файлы WSC - это текстовые файлы формата XML, которые описывают набор элементов и атрибутов, определяющих интерфейс объекта (в частности, свойства и методы, которые могут вызываться из сценариев), а также его реализацию на каком-либо языке сценариев.

Файлы WSC имеют несколько собственных элементов XML:

  • Внутри элемента реализуется полное определение компонента сценария. Все остальные элементы должны размещаться между тегами и .
  • С помощью элемента the в компоненте может быть реализована более углубленная проверка ошибок. Здесь используются два атрибута: error и debug. Если error="true", то будут выводиться более подробные сообщения об ошибках, а если используется атрибут debug="true", то это дает возможность пошагового выполнения кода сценария в отладчике сценариев (script debugger).
  • В элементе размещается информация, необходимая для регистрации данного компонента COM в системе. Он имеет четыре атрибута, которые приведены в Таблице 1. Корректный глобально уникальный идентификатор (GUID) можно сгенерировать либо с помощью мастера Windows Script Component Wizard (см. вкладку "Дополнительные ресурсы"), либо с помощью утилиты guidgen.exe из пакета Platform Software Development Kit (SDK). Когда вы регистрируете или удаляете (unregister) компонент (эту процедуру я далее кратко опишу), исполнительная среда WSC использует данные, размещенные в элементе для внесения соответствующих изменений в реестр.
  • Компонент используется для описания интерфейса компонента (в частности, его доступных свойств и методов). Все элементы типа или должны размещаться внутри элемента .
  • Элемент служит для объявления свойств компонента. В случае простого свойства read/write (чтение/запись) элемент ссылается на глобальную переменную в коде сценария. Имя этой глобальной переменной должно точно совпадать с именем данного свойства, за исключением тех случаев, когда для организации ссылки на переменную с другим именем используется атрибут internalname. Элемент также может использовать элементы и (они не имеют закрывающих тегов), когда необходимо вызвать код, реализующий установку и/или извлечение значения данного свойства, а также при создании свойств типа read-only или write-only. Если создается свойство write-only, то в этом случае в элемент включается только элемент . В сценарии, в свою очередь, должна быть определена функция с именем put_propertyname, где propertyname соответствует имени требуемого свойства. Соответственно, при создании свойства read-only используется только элемент , а соответствующая функция в сценарии должна иметь название get_propertyname. Для использования других имен функций, используемых для обращений к свойствам, в элементы и может добавляться атрибут internalname.
  • Элемент используется при объявлении того или иного метода компонента. Имя метода должно совпадать с именем соответствующей функции в коде сценария. Как и в случае элемента , если нужно использовать различающиеся имена, задействуйте атрибут internalname. При необходимости объявления параметров функции могут применяться один или несколько элементов .
  • В элементе
    
    
     
    
    Листинг 2: Фрагмент GetMembers.wsc
    
     
    
    
    
     
    
    Листинг 3. UseGetMembers.vbs
    
    Dim GetMembers, Member
    
    Set GetMembers = CreateObject("Penton.GetMembers")
    
     
    
    ' BEGIN COMMENT
    
    ' Вывод с помощью метода Echo 
    
    ' имени каждого члена группы Domain Admins в текущем домене.
    
    ' END COMMENT
    
    For Each Member In GetMembers.Members
    
      WScript.Echo Member
    
    Next