Отправляет email-рассылки с помощью сервиса Sendsay

Windows Scripting

  Все выпуски  

Windows Scripting (выпуск 7)


Служба Рассылок Subscribe.Ru проекта Citycat.Ru
 
 
 

Windows Scripting (выпуск 7)

 
 
 

Здравствуйте!

Приношу свои извинения за то, что рассылка долго не выходила - у ведущего были некоторые проблемы, которые наконец начинают разрешаться. Надеюсь, что отныне рассылка будет выходить более регулярно.

Из приятного: Ваш покорный слуга недавно пересдал на Brainbench экзамен VBScript 5.5 с результатом 4.6 балла и оказался на 15 месте в мире :) - из 3370 уже сдавших этот экзамен.

В этом выпуске:

Архив рассылки Вы найдете на сайте scripting.narod.ru.

 
Новости
 
Выпущена вторая бета-версия Windows Script 5.6
 
  • 11.04.2001
    Выпущена вторая бета-версия Windows Script 5.6. Скачать ее можно здесь: http://www.microsoft.com/msdownload/vbscript/scripting56.asp.
  •  
    Вышел в свет апрельский номер журнала MSDN Magazine
     
  • 20.03.2001
    Вышел в свет апрельский номер журнала MSDN Magazine. Среди его статей:
  •  
    В журнале MSDN Online Voices опубликована очередная статья Andrew Clinick
     
  • 13.03.2000
    В журнале MSDN Online Voices опубликована очередная статья Andrew Clinick - Scripting the Experience with Microsoft Office Developer. На этот раз она посвящена использованию скриптов в разработке приложений под новую версию Microsoft Office - Microsoft Office XP. Очередная статья из серии Scripting Clinic ожидается 9 апреля.
  •  
    Новая книга на colibri.ru - "Perl. Архив программ"
     
  • 26.01.2001
    Perl. Архив программ - Браун М., "Бином" - 2001, 720 стр.
    В книге представлена и подробно описана библиотека программ, предназначеных для использования в различных областях программирования. Тематика программ подобрана таким образом, чтобы продемонстрировать преимущества языка PERL при решении тех задач, для которых и создавался язык. [Подробнее] [Заказать]
  •  
    В журнале MSDN Online Voices опубликована очередная статья Andrew Clinick
     
  • 16.01.2001
    В журнале MSDN Online Voices опубликована очередная статья Andrew Clinick - Introducing Visual Studio for Applications, посвященная этому новому продукту Microsoft. VSA - гибрид технологий Visual Basic for Applications (VBA) и Windows Script - предназначается для настройки (customization) программ в Windows .NET. Очередная статья из серии Scripting Clinic ожидается 12 февраля.
  •  
    Вышел в свет февральский номер журнала MSDN Magazine
     
  • 11.01.2000
    Вышел в свет февральский номер журнала MSDN Magazine. Среди его статей: Как нетрудно заметить, Microsoft активно переходит на .NET. Думаю, и нам пора...

    Тем, кто заинтересовался, предлагаю для начала посетить .NET Developer Center на сайте Microsoft.

    Кстати, к февральскому номеру прилагается CDROM с Microsoft .NET Beta 1. Если, конечно, вы покупаете печатную версию.

  •  
    Разные советы
     
    Журнал MSND Magazine в виде CHM-файлов
     
    Номера журнала MSND Magazine за 2001 год можно скачать в виде CHM-файлов и потом не торопясь просматривать в offline. Очень удобно и то, что система HTML Help предоставляет полноценный поиск.

    Вот текущие ссылки:

    Как дальше - догадайтесь сами :)

     
    Вопросы и ответы
     
    Как перечислить все сервера Microsoft Exchange Server 2000?
     
    Все сервера Microsoft Exchange Server 2000, находящиеся в домене, можно перечислить через Active Directory.

    В данном примере используется доступ к Active Directory через ADO.

    Листинг: enumerate.vbs

    Option Explicit ' узнаем имя локального компьютера Dim ServerName Dim Network Set Network = WScript.CreateObject("WScript.Network") ServerName = Network.ComputerName Set Network = Nothing ' выбираем RootDSE Dim RootDSE Set RootDSE = GetObject("LDAP://" & ServerName & "/RootDSE") ' можно было бы и так: ' Set RootDSE = GetObject("LDAP://RootDSE") ' но так иногда возникают проблемы на Windows NT ' выбираем configurationNamingContext Dim CNC CNC = RootDSE.Get("configurationNamingContext") ' открываем коннекцию ADO через ADSI провайдер OLE DB Dim Connection Set Connection = CreateObject("ADODB.Connection") Connection.Provider = "ADsDSOObject" Connection.Open "ADs Provider" ' кстати, первым параметром метода Open может быть любая ' (в том числе пустая) строка ' традиционно указывается "ADs Provider" ' самое интересное - строка запроса Dim Query Query = "<LDAP://" & CNC & _ ">;(objectCategory=msExchExchangeServer);" & _ "name,serialNumber;subtree" ' исполняем команду Dim Command Set Command = CreateObject("ADODB.Command") Command.ActiveConnection = Connection Command.CommandText = Query Dim Recordset Set Recordset = Command.Execute ' пробегаемся по результатам Dim S Do While Not Recordset.EOF ' версия возвращается почему-то как Variant, ' т.е. следующая строка не пройдет: ' S = S & Recordset.Fields("serialNumber") Dim Version Version = Recordset.Fields("serialNumber").Value ' записываем результат S = S & Recordset.Fields("name") & " - " & Version(0) & vbNewLine Recordset.MoveNext Loop ' закрываем все, что открыли Recordset.Close Connection.Close Set Recordset = Nothing Set Command = Nothing Set Connection = Nothing ' сообщаем результат If Len(S) = 0 Then S = "No Microsoft Exchange servers found!" Else S = "Servers found:"& vbNewLine & S End If MsgBox S, vbOkOnly + vbInformation

    Смотри также

  • Как определить версию Microsoft Exchange Server 2000?
  •  
    Скрипты
     
    Чтение тегов MP3-файлов (ActiveX, написанный на VBScript)
     
    Вашему вниманию предлагается ActiveX, написанный на VBScript и предназначенный для чтения тегов MP3-файлов (название песни, исполнитель, из какого альбома, т.д.).

    Разработан он с помощью малоизвестной и малоиспользуемой технологии Microsoft под названием Windows Script Components (бывшие scriptlets).

    Windows Script Components - это технология, позволяющая писать компоненты COM (ActiveX) на скриптовых языках. Подробнее о технологии Windows Script Components можно прочитать на сайте Microsoft и в других источниках (см. список ссылок в конце статьи). Особенно рекомендуется документация по Windows Script Components, ссылка на которую дана чуть ниже.

    Ссылки

    Последняя версия Windows Script (со встроенными Windows Script Components)
    Документация по Windows Script Components
    Windows Script Component Wizard, облегчающий создание WSC-файлов

    Инсталляция

    1. Скачайте и проинсталлируйте последнюю версию Windows Script (см.ссылку вверху).
      Если Вы работаете под Windows 2000, это делать не обязательно.
    2. Скачайте файл mp3tags.wsc. Это и есть ActiveX, написанный на VBScript.
    3. Зарегистрируйте его (так же, как и обычный ActiveX):
      regsvr32 mp3tags.wsc
    4. Все, теперь скрипт готов к употреблению.
    Чтобы использовать ActiveX, необходимо его создать стандартным способом: Dim MP3Tags Set MP3Tags = CreateObject("Scripting.Mp3TagsReader") А теперь - несколько примеров.

    Пример 1: sample1.vbs

    Этот скрипт показывает теги MP3-файла, имя которого передано в командной строке. Option Explicit Const AppName = "MP3 Tags Reader sample 1" ' проверяем число аргументов If WScript.Arguments.Count <> 1 Then ShowHelp WScript.Quit End If ' получаем имя MP3-файла Dim Mp3Name Mp3Name = WScript.Arguments(0) ' создаем объект Mp3TagsReader Dim Reader Set Reader = CreateObject("Scripting.Mp3TagsReader") ' читаем теги файла Dim Result Result = Reader.Read(Mp3Name) ' если ошибка - показываем ее код If Result <> 0 Then MsgBox "Error " & Result & " reading MP3 tags from file" & _ vbNewLine & Mp3Name, vbExclamation, AppName WScript.Quit End If ' если все нормально - показываем все теги MsgBox "File:" & vbTab & Reader.FileName & vbNewLine & _ "Title:" & vbTab & Reader.Title & vbNewLine & _ "Artist:" & vbTab & Reader.Artist & vbNewLine & _ "Album:" & vbTab & Reader.Album & vbNewLine & _ "Year:" & vbTab & Reader.Year & vbNewLine & _ "Comment:" & vbTab & Reader.Comment & vbNewLine & _ "Genre:" & vbTab & Reader.Genre & _ " (" & Reader.GenreIndex & ")" & vbNewLine & _ "Track:" & vbTab & Reader.Track & vbNewLine, _ vbInformation, AppName ' уничтожаем созданный ранее объект Set Reader = Nothing ' показывает справку Sub ShowHelp MsgBox "MP3 file name is not specified." & _ vbNewLine & vbNewLine & "Usage:" & vbNewLine & _ " " & WScript.ScriptName & " mp3_file_name", _ vbCritical, AppName End Sub

    Пример 2: sample2.vbs

    Этот скрипт находит все MP3-файлы, в тегах которых есть заданная строка. Поиск начинается с каталога, где находится скрипт, и включает все подкаталоги. Option Explicit Const AppName = "MP3 Tags Reader sample 2" ' запрашиваем текст для поиска Dim SearchText SearchText = InputBox("Enter text to search in MP3 tags:", AppName) If Len(SearchText) = 0 Then WScript.Quit ' определяем стартовый каталог Dim Root Root = WScript.ScriptFullName Dim I I = InStrRev(Root, "\") If I = 0 Then I = InStrRev(Root, "/") Root = Left(Root, I - 1) ' создаем объект FileSystemObject - ' он будет использоваться в функции рекурсивного обхода каталогов Dim FSO Set FSO = CreateObject("Scripting.FileSystemObject") ' создаем объект Mp3TagsReader для тех же целей Dim Reader Set Reader = WScript.CreateObject("Scripting.Mp3TagsReader") ' строка, в которой будут накапливаться имена найденных файлов Dim S ' начинаем рекурсивный обход каталогов ScanFolder Root ' уничтожаем созданные ранее объекты Set Reader = Nothing Set FSO = Nothing If Len(S) = 0 Then ' если ничего не найдено S = "Search string not found!" Else ' иначе добавляем вводную строчку S = "Search string found in:" & vbNewLine & S End If ' выводим диалог с результатом MsgBox S, vbOkOnly + vbInformation, AppName ' это функция рекурсивного обхода каталогов Sub ScanFolder(FolderName) ' порлучаем текущий каталог Dim Folder Set Folder = FSO.GetFolder(FolderName) ' рекурсивно проходим все файлы Dim File For Each File In Folder.Files ' пытаемся прочитать теги MP3 Dim Result Result = Reader.Read(File.Path) If Result = 0 Then ' этот файл содержит теги MP3 ' ищем строку поиска в тегах If InStr(Reader.Title, SearchText) > 0 Or _ InStr(Reader.Artist, SearchText) > 0 Or _ InStr(Reader.Album, SearchText) > 0 Or _ InStr(Reader.Comment, SearchText) > 0 Then ' если нашли - добавляем к строке результата S = S & File.Path & vbNewLine End If End If Next ' рекурсивно проходим все подкаталоги Dim SubFolder For Each SubFolder In Folder.SubFolders ScanFolder SubFolder.Path Next End Sub

    Листинг: mp3tags.wsc

    Исходный текст ActiveX. <?XML version="1.0" standalone="yes" encoding="UTF-16" ?> <?component error="true" debug="true"?> <component> <registration description="MP3 Tags Reader" progid="Scripting.Mp3TagsReader" version="1" classid="{C2DE6203-17AE-11d5-8CF4-8EBC99C67466}"> </registration> <public> <property name="Title"><get/></property> <property name="Artist"><get/></property> <property name="Album"><get/></property> <property name="Year"><get/></property> <property name="Comment"><get/></property> <property name="GenreIndex"><get/></property> <property name="Genre"><get/></property> <property name="Track"><get/></property> <property name="FileName"><get/></property> <method name="Read"> </method> </public> </component>

    Смотри также

  • Windows Script Components на сайте Microsoft
  • Колонка Visual Programmer в журнале Microsoft Systems Journal (февраль 2000)
  • ASP and Windows Script Components (Microsoft Internet Developer, декабрь 1999)
  • Windows Script Components - They Get Around, by Andrew Clinick
  • Создание COM-компонентов с помощью скриптовых языков в журнале "Технология Клиент-Сервер" (1 квартал 2000)
  • Статьи из Microsoft Knowledge Base, посвященные Windows Script Components
  •  
    Библиотека повторно используемых классов
     
    Класс CLog - запись в журнал
     
    Класс CLog преназначен для записи текста в файл журнала (log). Это может быть как отладочная информация, так и информация о ходе выполнения скрипта.

    Основные особенности класса CLog:

    • Имя файла журнала генерируется автоматически: он создается в том же каталоге, где находится файл исполняемого скрипта, и имеет то же имя, но с расширением .log.
    • Имя файла журнала можно узнать или поменять.
    • Для удобства работы можно узнать каталог, в котором находится файл исполняемого скрипта, а также имя этого файла (без расширения).
    • Журнал можно вести как в формате ANSI (по умолчанию), так и формате Unicode.
    • При записи строчки в ее начало автоматически помещается текущее время (эта опция может быть отключена).
    • Специальная функция позволяет очистить (точнее, удалить) файл журнала.
    • Можно также считать весь журнал в строковую переменную.

    Методы и свойства класса

    Метод Описание
    Write(Text) Записывает строку Text в файл журнала.
    Возвращает True в случае успеха, иначе - False.
    ReadAll Считывает файл журнала целиком.
    В случае ошибки возвращается пустая строка.
    Clear Удаляет файл журнала.
    Возвращает True в случае успеха, иначе - False.

    Свойство Описание
    LogFullName Полное имя файла журнала.
    Read/Write.
    ScriptPath Каталог, в котором находится файл исполняемого скрипта.
    Read only.
    ScriptName Имя файла исполняемого скрипта (без расширения).
    Read only.
    Format Формат записи журнала: ANSI (0), Unicode (-1), по умолчанию (-2).
    По умолчанию - ANSI.
    Read/Write.
    IncludeTime Определяет, помещать ли в начало строки текущее время.
    По умолчанию - True.
    Read/Write.
    FSO Возвращает объект типа FileSystemObject, используемый классом CLog.
    Read only.

    Пример 1

    Самый простой пример: создаем объект Log типа CLog; удаляем файл журнала, если он был (метод Clear); пишем в журнал строку (метод Write). <job id="CLog1"> </job>

    Пример 2

    В этом примере мы поменяем путь к файлу журнала - он будет сохраняться в TEMP-каталоге.

    Обратите внимание на отсутствие метода Clear - в этом случае файл журнала не будет удаляться при каждом запуске скрипта.

    И еще - путь к TEMP-каталогу получается через объект FileSystemObject (свойство FSO), который используется классом CLog.

    <job id="CLog2"> </job>

    Пример 3

    Еще один простой пример - мы отменим запись текущего времени в начало строки и будем использовать формат Unicode. <job id="CLog3"> </job>

    Пример 4

    И последний пример - после записи двух строк в журнал мы прочитаем его и выведем в диалоговом окне. <job id="CLog4"> </job>

    А вот наконец собственно листинг класса CLog:

    Листинг

    Option Explicit Class CLog Private m_FSO Private m_LogFullName Private m_ScriptName Private m_ScriptPath Private m_Format Private m_IncludeTime Private Sub Class_Initialize Set m_FSO = CreateObject("Scripting.FileSystemObject") m_ScriptName = WScript.ScriptName Dim I I = InStrRev(m_ScriptName, ".") If I > 0 Then m_ScriptName = Left(m_ScriptName, I - 1) m_ScriptPath = WScript.ScriptFullName I = InStrRev(m_ScriptPath, "\") If I > 0 Then m_ScriptPath = Left(m_ScriptPath, I) m_LogFullName = m_ScriptPath & m_ScriptName & ".log" m_Format = 0 ' ANSI m_IncludeTime = True End Sub Private Sub Class_Terminate Set m_FSO = Nothing End Sub Property Get FSO Set FSO = m_FSO End Property Property Let LogFullName(NewName) m_LogFullName = NewName End Property Property Get LogFullName LogFullName = m_LogFullName End Property Property Get ScriptPath ScriptPath = m_ScriptPath End Property Property Get ScriptName ScriptName = m_ScriptName End Property Property Let Format(NewFormat) m_Format = NewFormat End Property Property Get Format Format = m_Format End Property Property Let IncludeTime(NewValue) m_IncludeTime = NewValue End Property Property Get IncludeTime IncludeTime = m_IncludeTime End Property Function Write(Text) On Error Resume Next ' for example if access is denied Dim File Set File = _ m_FSO.OpenTextFile(m_LogFullName, 8, True, m_Format) Write = Err = 0 If Write Then If m_IncludeTime Then Text = Now & " " & Text File.Write Text & vbNewLine File.Close End If Set File = Nothing On Error GoTo 0 End Function Function ReadAll On Error Resume Next ' if file does not exist Dim File Set File = _ m_FSO.OpenTextFile(m_LogFullName, 1, False, m_Format) If Err = 0 Then ReadAll = File.ReadAll File.Close Else ReadAll = "" End If Set File = Nothing On Error GoTo 0 End Function Function Clear On Error Resume Next ' if file does not exist m_FSO.DeleteFile m_LogFullName, True Clear = Err = 0 On Error GoTo 0 End Function End Class
     
    Новые статьи из Microsoft Knowledge Base
     
     
     
     
    Архив рассылки Вы найдете на сайте scripting.narod.ru.
     
     


    http://subscribe.ru/
    E-mail: ask@subscribe.ru

    В избранное