Андрей Попов - Windows Script Host для Windows 2000/XP
Реализация объекта DateArc.wsc на VBScript
Различие между компонентами-сценариями, написанными на языках JScript и VBScript, проявляется только в секции <script> WSC-файлов. Во-первых, естественным образом меняется синтаксис описанных внутри контейнера <script> функций. Во-вторых, в WSC-файле, написанном с помощью VBScript, отсутствует описание внутреннего объекта, который генерируется программой Windows Script Component Wizard и имеет поля и методы, совпадающие с объявленными внутри элемента <public> (см. листинг 10.3).
Объяснение этому очень простое — в VBScript нельзя создавать свои внутренние объекты.
Полностью содержимое файла DateArcVB.wsc, который реализует СОМ-объект DateArc.WSC с помощью VBScript, приведено в листинге 10.5.
Листинг 10.5. СОМ-объект DateArc.WSC (VBScript)<?xml version="1.0" encoding="windows-1251"?>
<component>
В <registration description="DateArc" progid="DateArc.WSC"
В version="1.00" classid="{424ac2bc-5732-4dea-be17-0211af99cd79}">
В <script language="VBScript">
В <![CDATA[
Dim WshShell
Function Register()
 'Создаем объект WshShell
В Set WshShell = CreateObject("WScript.Shell")
 WshShell.Popup "Компонент зарегистрирован в системе",0,_
 "Компонент для архивирования файлов",vbInformation
End Function
Function Unregister()
 'Создаем объект WshShell
В Set WshShell = CreateObject("WScript.Shell")
 WshShell.Popup "Компонент удален из системы",0,_
 "Компонент для архивирования файлов",vbInformation
End Function
В ]]>
В </script>
В </registration>
В <public>
В <property name="SFrom">
В В <get/>
В В <put/>
В </property>
В <property name="SArch">
В В <get/>
В В <put/>
В </property>
В <property name="SPref">
В В <get/>
В В <put/>
В </property>
В <property name="SMask">
В В <get/>
В В <put/>
В </property>
В <property name="SErrMess">
В В <get/>
В </property>
В <method name="FilesToArchiv">
В </method>
В </public>
В <script language="VBScript">
В <![CDATA[
Dim SFromВ В В 'Рсходный каталог для архивирования
Dim SArch   'Каталог, в котором будет создаваться архив
Dim SPref   'Префикс файла
Dim SMask   'Маска, по которой отбираются файлы для
            'архивирования
Dim SErrMess 'Текст сообщения об ошибке
'Чтение и запись свойства SFrom
Function get_SFrom()
В get_SFrom = SFrom
End Function
Function put_SFrom(newValue)
В SFrom = newValue
End Function
'Чтение и запись свойства SArch
Function get_SArch()
В get_SArch = SArch
End Function
Function put_SArch(newValue)
В SArch = newValue
End Function
'Чтение и запись свойства SPref
Function get_SPref()
В get_SPref = SPref
End Function
Function put_SPref(newValue)
В SPref = newValue
End Function
'Чтение и запись свойства SMask
Function get_SMask()
В get_SMask = SMask
End Function
Function put_SMask(newValue)
В SMask = newValue
End Function
'Чтение свойства SErrMess
Function get_SErrMess()
В get_SErrMess = SErrMess
End Function
'Вспомогательная функция для символьного представления даты
Function NowIs()
В Dim d,s,s1
В s=""
В s1=""
 'Определяем текущую дату
В d=Date()
 'Выделяем номер месяца
В s=s & Month(d)
 'Если месяц представляется одним символом, добавляем слева "0"
В If Len(s)=1 Then
В s="0" & s
В End If
 'Выделяем в дате день
В s1=s1 & Day(d)
 'Если день представляется одним символом, добавляем слева "0"
В If Len(s1)=1 Then
В s1="0" & s1
В End If
В s=s & s1
 'Возвращаем сформированную строку
В NowIs=s
End Function
'Проверка доступности каталогов
Function CheckPath()
В Dim FSO
 'Создаем объект FileSystemObject
В Set FSO=CreateObject("Scripting.FileSystemObject")
 'Проверяем доступность исходного каталога
В If Not FSO.FolderExists(SFrom) Then
В 'Рсходный каталог РЅРµ существует
 'Формируем строку с информацией об ошибке
 SErrMess="Не найден исходный каталог " & SFrom
В CheckPath=false
В End If
 'Проверяем доступность каталога для архивирования
В If Not FSO.FolderExists(SArch) Then
 'Каталог для архивирования не существует
 'Формируем строку с информацией об ошибке
 SErrMess="Не найден каталог для хранения архивов " & SArch
В CheckPath=false
В End If
 'Если оба каталога существуют, возвращаем true
В CheckPath=true
End Function
'Архивирование файлов из исходного каталога
Function FilesToArchiv()
В Dim WshShell,SComLine,RetCode,SFName,FSO
 'Если хотя бы один из каталогов не существует, возвращаем false
В If Not CheckPath() Then
В FilesToArchiv=false
В End IfВ
 'Создаем объект FileSystemObject
В Set FSO=CreateObject("Scripting.FileSystemObject")
 'Создаем объект WshShell
В Set WshShell=CreateObject("WScript.Shell")
 'Формируем имя файла-архива
В SFName=SPref & NowIs() & ".arj"
 'Формируем командную строку для запуска архиватора arj.exe
В SComLine="%COMSPEC% /c arj.exe a "
В SComLine=SComLine & FSO.BuildPath(SArch,SFName)+" "
В SComLine=SComLine & FSO.BuildPath(SFrom,SMask)
 'Запускаем архиватор arj.exe
В RetCode = WshShell.Run(SComLine, 1, true)
 'Анализируем код возврата для arj.exe
В If 0=RetCode Then
 'Выполнение arj.exe завершилось без ошибок
В FilesToArchiv=true
В Else
 'Формируем строку с информацией об ошибке
 SErrMess="Ошибка ARJ.EXE! Код " & RetCode
В FilesToArchiv=false
В End If
End Function
В ]]>
В </script>
</component>В
Глава 11
Применение сценариев WSH для администрирования Windows РҐР
Одним из основных назначений сценариев WSH является, в конечном счете, автоматизация работы администраторов компьютерных систем, построенных на базе Windows. В данной главе мы рассмотрим примеры сценариев, которые могут быть полезны администраторам в их повседневной работе, например, при создании сценариев регистрации для пользователей.