Wscript shell что это
С помощью объекта WshShell можно запускать новый процесс, создавать ярлыки, работать с системным реестром, получать доступ к переменным среды и специальным папкам Windows. Создается этот объект следующим образом:
Объект WshShell имеет три свойства, которые приведены в табл. 1.7.
Таблица 1.7. Свойства объекта WshShell
| Свойство | Описание |
|---|---|
| CurrentDirectory | Здесь хранится полный путь к текущему каталогу (к каталогу, из которого был запущен сценарий) |
| Environment | Содержит объект WshEnvironment , который обеспечивает доступ к переменным среды операционной системы для Windows NT/2000/XP или к переменным среды текущего командного окна для Windows 9х |
| SpecialFolders | Содержит объект WshSpecialFolders для доступа к специальным папкам Windows (рабочий стол, меню Пуск (Start) и т.д.) |
Опишем теперь методы, имеющиеся у объекта WshShell (табл. 1.8).
Таблица 1.8. Методы объекта WshShell
| Метод | Описание |
|---|---|
| AppActivate( title ) | Активизирует заданное параметром title окно приложения. Строка title задает название окна (например, «calc» или «notepad») или идентификатор процесса (ProcessID, PID) |
| CreateShortcut( strPathname ) | Создает объект WshShortcut для связи с ярлыком Windows (расширение lnk) или объект WshUrlShortcut для связи с сетевым ярлыком (расширение url). Параметр strPathname задает полный путь к создаваемому или изменяемому ярлыку |
| Environment( strType ) | Возвращает объект WshEnvironment , содержащий переменные среды заданного вида |
| Exec( strCommand ) | Создает новый дочерний процесс, который запускает консольное приложение, заданное параметром strCommand . В результате возвращается объект WshScriptExec , позволяющий контролировать ход выполнения запущенного приложения и обеспечивающий доступ к потокам StdIn , StdOut и StdErr этого приложения |
| ExpandEnvironmentStrings( strString ) | Возвращает значение переменной среды текущего командного окна, заданной строкой strString (имя переменной должно быть окружено знаками «%») |
| LogEvent( intType, strMessage [ ,strTarget] ) | Протоколирует события в журнале Windows NT/2000/XP или в файле WSH.log. Целочисленный параметр intТуре определяет тип сообщения, строка strMessage — текст сообщения. Параметр strTarget может задаваться только в Windows NT/2000/XP, он определяет название системы, в которой протоколируются события (по умолчанию это локальная система). Метод LogEvent возвращает true , если событие записано успешно и false в противном случае |
| Popup( strТехt, [nSecToWait] , [strTitle], [nType] ) | Выводит на экран информационное окно с сообщением, заданным параметром strText . Параметр nSecToWait задает количество секунд, по истечении которых окно будет автоматически закрыто, параметр strTitle определяет заголовок окна, параметр nType указывает тип кнопок и значка для окна |
| RegDelete( strName ) | Удаляет из системного реестра заданный параметр или раздел целиком |
| RegRead( strName ) | Возвращает значение параметра реестра или значение по умолчанию для раздела реестра |
| RegWrite( strName, anyValue [,strType] ) | Записывает в реестр значение заданного параметра или значение по умолчанию для раздела |
| Run( strCommand, [intWindowStyle], [bWaitOnReturn] ) | Создает новый независимый процесс, который запускает приложение, заданное параметром strCommand |
| SendKeys( string ) | Посылает одно или несколько нажатий клавиш в активное окно (эффект тот же, как если бы вы нажимали эти клавиши на клавиатуре) |
| SpecialFolders( strSpecFolder ) | Возвращает строку, содержащую путь к специальной папке Windows, заданной параметром strSpecFolder |
Рассмотрим методы, приведенные в табл. 1.8, более подробно.
Метод AppActivate активизирует уже запущенное указанное приложение (устанавливает на него фокус), но не производит никаких действий по изменению размеров его окна. Для того чтобы первоначально запустить нужное приложение и определить вид его окна, следует использовать метод Run объекта WshShell . Для того чтобы определить, какое именно приложение необходимо активизировать, строка title сравнивается по очереди с названиями окон всех запущенных приложений. Если не найдено ни одного точного совпадения, будет производиться поиск того приложения, название окна которого начинается со строки title . Если и в этом случае не будет найдено ни одного подходящего приложения, то будет вестись поиск приложения, заголовок которого заканчивается на эту строку. Если будет найдено несколько подходящих окон, то произойдет активизация одного из них (окно выбирается произвольно).
Windows Script Host (WSH)
В этой статье пойдет разговор о возможностях Windows Script Host в Windows. Естественно, статья не способна заменить всю документацию, но мы попытаемся охватить основные моменты и дать несколько полезных и употребительных примеров.
Что такое Windows Script Host?
Для чего же все-таки нужен WSH? WSH позволяет работать с файловой системой, реестром, сетевыми соединениями (диски, принтеры), окружением и др. С помощью wsh-скриптов можно управлять запуском программ, посылать сигналы другим процессам, удаленно администрировать систему, работать с сетевым принтером, управлять входом в систему (login-скрипты) и многое другое. Скрипты для Windows Script Host могут быть не только отдельными программами, но и встраиваться в HTML-страницы, и использоваться в Active Server Pages (ASP), JScript, VBScript или PerlScript
Где взять Windows Script Host?
Windows Script Host (WSH) встроена в Microsoft Windows 98/Me/2000. Если вы до сих пор пользуетесь Windows 95,то можете загрузить Windows Script Host с сайта Microsoft. Кстати, последняя версия имеет номер 5.6, поэтому пользователи Windows 98/Me/2000 также могут обновить свою версию с 1.0 или 2.0 до текущей, имеющей дополнительные возможности.
Первые шаги по программированию WSH
Скрипт WSH является обычным текстовым файлом с расширениями .js, vbs и подключаются с помощью ActiveXObject в JS- и VBS-скриптах (в т.ч. в HTML). Кроме этого, WSH-скрипты могут содержаться в «своих» файлах — *.wsh и *.wsf (wsh-файлы — это скрипты для старых версий WSH). Эти файлы представляют собой специальные XML-конструкции. В одном файле можно использовать все доступные скриптовые языки.
Создадим первый учебный скрипт в обычном блокноте.
Запустите блокнот. Напечатайте следующий текст:
Сохраните файл с расширением .js (вместо .txt). Пусть это будет Hello.js.
Запустите Проводник и щелкните на созданном файле.
WSHost запустит движок JScript и исполнит наш скрипт.
В результате наших действий появится сообщение «Здравствуй, мир!»
Итак, у вас получилось! Но действительные возможности WSH гораздо шире. Вы можете создавать полноценные программы, имеющие очень маленькие размеры файлов. Для примера могу посоветовать скачать две программы (Настроить вид папки 1.0 и Сохранить выделенный текст 1.0) с сайта http://winchanger.narod.ru. Эти программы полностью написаны на WSH. Обратите внимание, что даже инсталяция этих программ сделана на WSH.
Объектная модель WSH
Для того, чтобы воспользоваться всеми возможностями, которые представляет эта технология, нужно хорошенько разобраться в ее структуре. Windows Script Host состоит из 14 объектов. Самым главным объектом является объект WScript.
- Устанавливает или получает аргументы командной строки.
- Определяет имя скриптового файла.
- Определяет имя хоста для скрипта (wscript.exe или cscript.exe)
- Определяет версию хоста
- Создает, соединяется или отсоединяется от объектов COM
- Программно останавливает выполнение скрипта
- Выводит сообщения
Объект Wscript
Все объекты имеют свои свойства и методы. Не будем утомлять читателя перечислением всех свойств объектов. Приведем только свойства для Wscript
| Свойство | Описание |
|---|---|
| Arguments | Возвращает указатель на список аргументов командной строки |
| FullName | Возвращает имя исполняемого файла хоста и полный путь к нему (например, C:\Windows\wscript.exe) |
| Name | Выводит замечательную надпись Windows Scripting Host |
| Path | Определяет каталог и путь, содержащие wscript.exe или cscript.exe |
| ScriptFullName | Возвращает полный путь и имя исполняемого в данный момент скрипта |
| ScriptName | То же, что и ScriptFullName, но без пути |
| Version | Возвращает версию установленного Windows Scripting Host |
Листинг файла sample.vbs
Возможности WSH
Пора перейти к конкретным примерам, которые могут пробудить ваш интерес к WSH
Drag-and-Drop в WSH
Как уже говорилось выше, WSH имеет богатые возможности для работы с файлами, реестром и так далее. Кроме того, WSH поддерживает Drag’n’Drop. С помощью объекта WScript.Arguments в своем скрипте вы получаете имена файлов, с которыми вам надо работать. Сохраните файл dragndrop.vbs (листинг ниже) на диске, откройте Проводник и теперь просто перетащите любые файлы на ваш скрипт, который покажет их имена (пути к ним).
Листинг файла dragndrop.vbs
Создание ярлыков WSH
Также просто создавать ярлыки. Рассмотрим пример создания ярлыка к калькулятору и поместим его в Автозагрузку.
Листинг файла createshortcut.vbs
Специальные папки
Здесь необходимо сказать несколько слов о специальных папках. В предыдущем примере мы использовали одну такую папку Автозагрузка. Но дело в том, что в английской версии Windows аналогичная папка носит имя Startup, и если вы укажете точный путь вроде C:\WINDOWS\Главное меню\Программы\Автозагрузка, то это сработает в русской версии Windows и нигде больше. Чтобы избежать этих проблем Microsoft создала список специалных папок.Чтобы получить доступ к какой-либо специальной папке можно воспользоваться свойством SpecialFolders объекта WshShell.
Листинг файла specfol.js
Работа WSH с реестром
Еще больше возможностей для реализации ваших фантазий предоставляет работа с реестром. Для этого используется объект Wscript.Shell с его методами RegRead, RegWrite, RegDelete.
Приведу пример создания записи в реестре, позволяющий менять заголовок в Internet Explorer
Листинг файла ie_title.vbs
Запуск других приложений
Объект WshShell позволяет запускать другие приложения. В следующем примере мы запускаем две копии Блокнота — новый экземпляр и с содержимым нашего скрипта
Работа WSH с файлами
Также легко можно копировать, переносить и удалять файлы и папки. Не представляет сложности и работа с просмотром содержимого файла и его редактирования. Освоив данные возможности, вы получаете возможность работать с файлами autoexec.bat и config.sys, проверять значения параметров в win.ini, вести логи работы пользователей
Для этого надо инициализировать объект файловой системы FSO, а затем воспользоваться одним из его методов для открытия файла:
Листинг для файла open.vbs
Итак, OpenTextFile открывает файл, если его нет, то создается новый файл. Из параметров, передаваемых методу, обязательным является только первый — имя файла. Остальные параметры можно не указывать. Вторым параметром устанавливается режим открытия файла. Возможные значения следующие:
- 1 — файл открывается только для чтения
- 2 — файл открывается для записи. Причем, все содержимое файла, которое было до этого, уничтожится
- 8 — файл открывается для добавления данных. Все, что вы запишите, будет добавлено в конец файла. Довольно удобно для ведения различных логов
Третья переменная может принимать значение true или false. Она показывает, создавать ли новый файл, если его до этого не существовало. Если значение равно true, то новый файл будет создан.
Вот мы с вами и рассмотрели наиболее используемые возможности WSH. Надеюсь, данная технология заинтересовала вас и вы самостоятельно продолжите изучение документации.
Дело в том, что в его постановке и выводах произведена подмена, аналогичная подмене в школьной шуточной задачке на сообразительность, в которой спрашивается:
— Cколько яблок на березе, если на одной ветке их 5, на другой ветке — 10 и так далее
При этом внимание учеников намеренно отвлекается от того основополагающего факта, что на березе яблоки не растут, в принципе.
В эксперименте Майкельсона ставится вопрос о движении эфира относительно покоящегося в лабораторной системе интерферометра. Однако, если мы ищем эфир, как базовую материю, из которой состоит всё вещество интерферометра, лаборатории, да и Земли в целом, то, естественно, эфир тоже будет неподвижен, так как земное вещество есть всего навсего определенным образом структурированный эфир, и никак не может двигаться относительно самого себя.
Удивительно, что этот цирковой трюк овладел на 120 лет умами физиков на полном серьезе, хотя его прототипы есть в сказках-небылицах всех народов всех времен, включая барона Мюнхаузена, вытащившего себя за волосы из болота, и призванных показать детям возможные жульничества и тем защитить их во взрослой жизни. Подробнее читайте в FAQ по эфирной физике.
VBScript Programming
VBScript, short for Visual Basic Scripting Edition, is a Microsoft-supplied scripting language similar to Visual Basic and Visual Basic for Applications. It can be used via Windows Script Host (WSH) as a Windows scripting language. Furthermore, it can be used as a client-side scripting language in web pages instead of JavaScript, but such pages will only work with Internet Explorer. Moreover, it can be used for server-side web scripting as part of Active Server Pages (ASP), and in other environments. This book focuses on the language use via WSH.
Scripts to be used with WSH are usually plain text files with .vbs extension. By default, Windows associates the extension with an interpreter of the language, and therefore, entering the script name on the Windows batch command line leads to script execution, albeit without waiting for script completion. Furthermore, scripts can be run from the desktop or the Windows file explorer, usually by double clicking.
VBScript can access objects available via Microsoft COM interface, including those of Microsoft Office. Thus, Microsoft Office can be scripted not only from Visual Basic for Applications (VBA) embedded in office files such as spreadsheets but also from VBScript scripts, in a syntanctically similar yet somewhat different manner.
Two commands are available to let WSH execute a script: wscript and cscript. wscript is for interaction via simple popup windows whereas cscript is for command line interaction via text console. By default, .vbs extension is associated with wscript.
VBScript is mostly case-insensitive as for keywords and identifiers. Thus, «End If» is equivalent to «end if», and «FSO.CreateTextFile( . » is equivalent to «fso.createtextfile( . «.
Contents
Data types [ edit | edit source ]
Unlike in VBA, variables cannot be dimensioned to be restricted to values of a particular data type, such as String. Rather, they are all of data type Variant.
However, there is still an underlying data type of each variable, depending on what you assign to the variable. You can find out about the current underlying data type of a variable content using TypeName function (returns a string) and VarType function (returns an integer).
-
, Microsoft Docs , ss64.com , docs.microsoft.com , ss64.com
Literals [ edit | edit source ]
Examples of literals of various data types:
Examples that are not of literals but serve the same purpose:
Dictionary [ edit | edit source ]
VBScript supports dictionaries AKA associative arrays via Scripting.Dictionary object. The key can be of any type except for arrays; thus, strings, integers, floating points, dates, etc. are supported.
-
, docs.microsoft.com
Input and output [ edit | edit source ]
For input and output for user interaction, VBScript in Windows Scripting Host offers a simple popup message box and a simple popup input box, which work for both script invocations via wscript (the default) and cscript. Text console input and output is not supported in scripts run via wscript; running via cscript is required.
Examples of input via WScript object, primarily via text console:
Examples of input and output via popup windows, both for wscript and cscript:
For reading from a text file and writing to a text file, see #File operations.
Example of getting command-line arguments:
Example of getting an environment variable:
-
, ss64.com , ss64.com , ss64.com , ss64.com , ss64.com , ss64.com , ss64.com , ss64.com
File operations [ edit | edit source ]
Unlike in VBA, file operations are not part of the language built-in core but rather are accessible from FileSystemObject.
Reading from a text file:
Writing to a text file:
Getting current directory:
Reading bytes from a binary file using ADODB.Stream:
Writing bytes to a binary file using ADODB.Stream:
Above, the trick is to use iso-8859-1 together with ChrW. A caveat is that iso-8859-1 does not define control codes so their mapping from Unicode to iso-8859-1 is formally undefined, but an implementation-defined mapping was chosen in ADODB.Stream and so it works anyway. The above cannot be reliably achieved using FileSystemObject by writing Chr(num) to a text file since that is only going to work in some locales but not others.
-
, ss64.com , Microsoft Docs , docs.microsoft.com , blogs.msdn.microsoft.com , stackoverflow.com , wikipedia.rog
Byte array [ edit | edit source ]
Byte arrays are to be contrasted with variant arrays of bytes. In VBScript, all declared arrays are variant arrays and it has no direct and simple method of creating a byte array. Still, a byte array can be created, even if in a more wordy manner and in dependence on ADODB.Stream.
Populating a byte array and then read-iterating it:
Above, populating a byte array uses writing Unicode code points in the range of 0-255 in iso-8859-1 encoding into a text stream, copying the text stream into a binary stream, and then reading the bytes from the binary stream. Read-iterating the byte array is brief and uses the trick of combined MidB and AscB rather than array index access.
Operators and math [ edit | edit source ]
Arithmetic operators include +, -, *, / (true division), \ (integer division), ^ (exponentiation) and mod (modulo). Integer division truncates toward zero, like in the C language: -3 \ 2 = -1. Integer division converts the operands to integral types (rounding them) before performing the division: 3.6 \ 2 = 2 (Long). Modulo is a remainder after the truncate-toward-zero integer division, and therefore, -3 mod 2 = -1 like C’s -3 % 2 rather than like Python’s -3 % 2 == 1.
Comparison operators include =, <>, <, >, <=, >= and Is.
Bitwise operators include And, Or, Xor, Not, Imp and Eqv. These operate on integer types (Byte, Integer, Long) as bitwise operators. When operating on negative integers, they act in keeping with the two’s complement internal representation of signed integers. There are no bitwise shift and bitwise rotation operators, but they can be emulated.
Boolean logical operators are the same as bitwise operators. When operating on booleans including boolean expressions, the bitwise operators double as boolean logical operators with no short-circuit evaluation by True being -1. Thus, True and 14 yields 14 since -1 as Integer (16-bit) is 0xFFFF.
Math functions include Abs, Atn, Cos, Exp, Fix, Int, Log, Randomize, Rnd, Round, Sgn, Sin, Sqr and Tan.
String concatenation operators are & (recommended) and + (not recommended).
-
, docs.microsoft.com , docs.microsoft.com , ss64.com , ss64.com
Excel [ edit | edit source ]
Excel can be scripted using VBScript by accessing Excel.Application object. Unlike VBA, VBScript does not support named argument passing to methods, only positional argument passing. Furthermore, functions that appear global from VBA in Excel need to be called as methods of the Excel object in VBScript. Moreover, Excel’s specific constants such as xlAnd are not available; you need to define the constant yourself or use a number instead.
-
, Microsoft Docs
Constants [ edit | edit source ]
There are multiple built-in constants, starting with vb. For instance, vbOKCancel is used in conjunction with MsgBox.
Applications-specific constants such as Excel’s xlAnd are not available.
-
, ss64.com , Microsoft Docs , Microsoft Docs , Microsoft Docs
Clipboard [ edit | edit source ]
VBScript does not support VBA’s MSForms.DataObject to access clipboard.
There are workarounds:
- For writing to the clipboard, you can run clip.exe available in Windows 7.
- For reading from the clipboard, you can access Internet Explorer via COM and let it read from the clipboard.
-
, stackoverflow.com
External processes [ edit | edit source ]
You can run external processes using Run method of WScript.Shell:
You can also do so using Exec method of WScript.Shell:
Keywords: external commands, running programs.
-
in Microsoft Windows 2000 Scripting Guide, TechNet Archive, Microsoft Docs , ss64.com , ss64.com
Regular expressions [ edit | edit source ]
You can use regular expressions using RexExp object:
Alternatively, you could create the regex object via Set RegExp = CreateObject(«VBScript.RegExp»), but, in VBScript, that is unnecessary.
-
, docs.microsoft.com , regular-expressions.info
Unicode [ edit | edit source ]
There is the following support for 16-bit Unicode in VBScript with WSH on platforms that support Unicode:
- Script source code can be stored in UTF-16 LE (litte endian), and then, string literals can be in Unicode. Variable names and procedure names cannot be in Unicode. UTF-16 BE (big endian) and UTF-8 are not supported. A script in UTF-8 with BOM will not run. A script in UTF-8 without BOM may run but string literals with characters beyond 127 will be garbled when output via MsgBox and other interfaces.
- UCase and LCase work with Unicode, so does MsgBox.
- Unicode characters can be entered via ChrW function by passing it a code point number. ChrW(127) = Chr(127) while ChrW(128) <> Chr(128).
- Unicode code point number of a character can be obtained via AscW.
- FileSystemObject methods OpenTextFile and CreateTextFile support reading and writing UTF-16 LE Unicode when instructed to do so via optional parameters.
- ADODB.Stream object supports writing Unicode to a file and reading from a file in UTF-8 by setting Stream.Charset to «utf-8», and in other encodings such as «ascii» or «iso-8859-1». You can obtain a list of encodings from cmd.exe command line via «reg query HKEY_CLASSES_ROOT\MIME\Database\Charset» or from PowerShell via «dir Registry::HKEY_CLASSES_ROOT\MIME\Database\Charset».
-
, docs.microsoft.com , stackoverflow.com , wikipedia.org , ss64.com , Microsoft Docs
Reserved keywords [ edit | edit source ]
VBScript has the excepted reserved keywords such as Dim or While; these cannot be used as variable names. However, it has also some reserved keywords that come from VBA and are not used by VBScript syntax, such as Byte and Long.
Versions [ edit | edit source ]
VBScript versions include 5.1 (Win 2000), 5.6 (XP), 5.7 (Vista) and 5.8 (Win 7, Win 10).
The table of added features per version in the linked Microsoft documentation shows no added features after year 2000.
Script host version is to be distinguished from the script engine version.
To find out about the engine version and the Windows Script Host version:
Running cscript without //nologo switch outputs script host version.
Interactive
Свойство Interactive показывает, используется ли диалоговый режим (WScript.exe), возвращая логический результат. А также может устанавливать или отключать диалоговый режим. При значении false — интерактивный режим отключается, т.е. диалоговые окна не могут использоваться.
WScript.Interactive[ = True|False]
Методы объекта WScript
CreateObject – создает экземпляр объекта ActiveX.
object.CreateObject(strProgID[,strPrefix])
object – объект WScript.
StrProgID – класс к которому принадлежит объект.
Например, создадим объект WshShell
Set WshShell = WScript.CreateObject(“WScript.Shell”)
ConnectObject – позволяет подключить исполняемый сценарий к существующему объекту, его событиям.
DisconnectObject – отключается от объекта, с которым был соединен сценарий методом ConnectObject.
GetObject – получает объект, который уже создан и находится в другом файле.
Echo – выводит диалоговое окно с сообщением пользователю. При использовании CScript.exe выводит строку с текстом.
Sleep – переводит сценарий в неактивное состояние, на заданное время (в миллисекундах), после чего продолжает его работу.
Quit – завершает работу сценария. Необязателен.
Windows Scripting Host имеет два вида диалоговых окон: простое (метод Echo) и управляющее (метод Popup)
Метод Echo объекта WScript отображает сообщение в диалоговом окне, если используется WScript.exe, или выводит строку с текстом, если используется CScript.exe, по своим возможностям дублируя команду echo bat-файлов.
object.Echo [[Arg1] [,Arg2] [,Arg3] . ]
object — объект WScript.
Arg1, Arg2, Arg3 . – данные, которые должны быть выведены на экран
Для перевода строки используется константа vbCrLf.
Wscript.Echo «Это», vbCrLf, «пример»
Wscript.Echo «Это»& vbCrLf& «пример»
Управляющее окно Popup имеет те же возможности вывода информации, что и окно созданное с помощью метода Echo, но вдобавок ко всему обладает дополнительными возможностями, расширяющими его возможности и сферу его применения. Метод Popup, является методом объекта WshShell, и для его использования должен быть создан объект WshShell.
intButton = object.Popup(strText,[WaitSec],[strTitle],[natType])
object — объект WshShell
strText — само сообщение в данном окне
WaitSec — время (в секундах), по истечении которого окно закроется
strTitle — заголовок окна. Если отсутствует, то заголовок окна будет по умолчанию «Сервер сценариев».
natType — параметр определяющий картинку и кнопку в данном окне.
OK и Отмена(Cancel)
Стоп(Abort), Повтор(Retry), и Пропустить(Ignore)
Да(Yes), Нет(No), и Отмена(Cancel)
Да(Yes) и Нет(No)
Повтор(Retry) и Отмена(Cancel)
Параметры определяющие рисунок:
При закрытии окно popup возвращает значение intButton – которое содержит информацию о том, какая кнопка была нажата.
Значения выбранных кнопок:
Нажатая кнопка
Интересной особенностью окна popup является его возможность закрываться по истечении заданного времени.
Dim Interval, WshShell
‘устанавливаем время через которое окно закроется:
‘создаем объект WshShell для метода Popup:
Set WshShell = CreateObject(“WScript.Shell”)
WshShell.Popup “Это окно закроется через 5 секунд”,Interval,_
В сценариях VBScript, кроме использования диалоговых окон Windows Script Host может использовать свои собственные диалоговые окна: MsgBox (окно вывода информации) и InputBox (окно ввода информации). Параметры, используемые в данных функциях, аналогичны применыемым в языке VBA.
Методы и свойства объекта WshShell
Объект WshShell служит для работы с переменными окружения Windows, специальными папками, запускает другие программы, создает ярлыки и т.д. Для его использования его необходимо создать методом CreateObject.
Set WshShell = CreateObject(“WScript.Shell”)
Информация о системе
Свойство Environment объекта WshShell, позволяет работать с системными переменными окружения. Для этого создается объект WshEnvironment
WshShell.Environment([strType])
strType – может принимать параметры «System», «User», «Volatile» или «Process» .
Значение “Volatile» используется для работы с данными, передаваемыми другими программами, а «System», «User» и «Process» используются для работы с системными данными.
Таблица системных данных среды, доступных с помощью значений «System», «User» и «Process»
Где присутствует
Количество процессоров на данном компьютере
Расширенные данные о процессоре
Путь к файлу командной строки (cmd.exe или command.com)
Каталог по умолчанию для пользователей
Первый локальный диск (обычно С:)
Заданные системные пути
Исполняемые файлы (.exe , .com и т.д.)
Диск на котором находится директория с операционной системой
Папка для временных файлов
Объект Environment, как и все коллекции WSH, имеет свойство Count, в котором хранится число элементов коллекции, и метод Item.
Следующий пример выводит на экран некоторые системные данные
‘создаем объект WshShell:
Set WshShell = WScript.CreateObject(«WScript.Shell»)
‘создаем объект Environment со значением PROCESS:
Set WshProEnv = WshShell.Environment(«PROCESS»)
SysInfo = «Системные параметры компьютера:» + Chr(10)+ Chr(10)
SysInfo = SysInfo + «Процессоров: » + _
SysInfo = SysInfo + «Директория Windows: » + _
SysInfo = SysInfo + «Временная папка: » + WshProEnv(«TEMP») + Chr(10)
Запуск приложений
С помощью метода Run объекта WshShell мы можем запускать другие приложения.
object.Run (strCommand, [intWindowStyle], [bWaitOnReturn])
object — объект WshShell
strCommand — исполняемая команда
Особенностью синтаксиса данного метода является то, что при использовании всех параметров скобки ( ) опускаются.
intWindowStyle — стиль окна запускаемого приложения
bWaitOnReturn — может принимать значение true или false, указывающее, следует ли сценарию дожидаться окончания выполнения запущенного приложения. true — выполнение сценария приостанавливается до тех пор, пока не будет закрыто запущенное приложение. false — не дожидаться.
Значения, принимаемые параметром intWindowStyle:
Запуск в скрытом виде
Обычный размер окна, если окно свернуто или развернуто на весь экран, то ему возвращается исходный вид и положение на экране
Запуск в свернутом виде
Развернутое на весь экран
Запуск в обычном размере, в неактивном состоянии (без фокуса)
Обычный размер в неактивном состоянии, но в фокусе остается запустившее приложение
Метод Run не может вызвать приложение, если оно расположено в папке, путь к которой содержит пробелы. В этом случае путь надо заключить в тройные кавычки.
В качестве примера, с помощью метода Run запустим программу Блокнот, с загруженным вызывающим сценарием.
‘Создаем объект WshShell:
Set WshShell = WScript.CreateObject(«WScript.Shell»)
‘Вызываем Блокнот и добавляем к нему в качестве параметра
‘путь исполняемого сценария:
WshShell.Run («%windir%\notepad » & WScript.ScriptFullName)
Специальные папки Windows
Для получения пути к специальным папкам Windows типа Мои документы, Рабочий стол и т.д. используется свойство SpecialFolders объекта WshShell.
object.SpecialFolders(objWshSpecialFolders)
object — объект WshShell;
objWshSpecialFolders – специальная папка.
objWshSpecialFolders
Название папки
Пустая папка, используемая в качестве шаблона для сетевой среды.
Программы, меню “Пуск”
Раздел просмотренных документов, меню “Пуск”
Кроме вышеперечисленных папок в Windows 2000 доступны:
AllUsersDesktop, AllUsersStartMenu, AllUsersPrograms, и AllUsersStartup.
Для перебора всех элементов коллекции можно применять операторы цикла For или For Each . In, указав имя коллекции WshShell.SpecialFolders. Свойство Count содержит количество элементов в коллекции.
В качестве примера составим сценарий, узнающий адрес папки “Рабочего стола”.
Dim WshShell, DesktopPath
Set WshShell = CreateObject(«WScript.Shell»)
‘получаем путь к рабочему столу:
MsgBox «Адрес рабочего стола: » + DesktopPat
Создание ярлыков
Для создания ярлыков используется метод CreateShortcut
object.CreateShortcut(strPathname)
object — объект WshShell
strPathname — имя и полный путь к ресурсу, для которого создается ярлык (например, это может быть файл, интернет-адрес и т.д.).
Для демонстрации метода CreateShortcut создадим на нашем рабочем столе ярлык блокнота.
В самом процессе создания ярлыка можно выделить несколько этапов:
1. Собственно создание ярлыка.
2. Установка его свойств.
3. Сохранения ярлыка с установленными свойствами
Начнем с первого пункта создадим ярлык на рабочем столе
Dim WshShell, DesktopPath, Nshortcut
‘Создаем объект WshShell:
Set WshShell = CreateObject(“WScript.Shell”)
‘получаем путь к нашему рабочему столу:
Set NShortcut = WshShell.CreateShortcut(DesktopPath & “\Блокнот.lnk”)
На втором этапе мы должны установить следующие свойства ярлыка, такие как:
TargetPath – имя ресурса на который ссылается ярлык.
WindowStyle – стиль запускаемого окна.
Может принимать следующие значения:
1 – открыть как обычное окно;
3 – раскрыть на весь экран;
7 – запустить в свернутом виде.
HotKey – устанавливает клавиши быстрого вызова
IconLocation – расположение иконки ярлыка, файлы .exe и .dll могут содержать несколько значков, номера которых начинаются с 0. Можно использовать библиотеки значков, например Moricons.dll или Shell32.dll, находящиеся в папке Windows или во вложенной папке \System.Можно также присвоить путь для .bmp .ico-файла.
Description – всплывающая подсказка (комментарий)
WorkingDirectory – устанавливает рабочий каталог, который приложение использует для хранения временных и других файлов.
И, на самом последнем этапе создания ярлыка, мы сохраняем установленные свойства и сам ярлык методом Save.
Таким образом, наш сценарий полностью будет иметь следующий вид:
Dim WshShell, DesktopPath, Nshortcut
‘Создаем объект WshShell:
Set WshShell = CreateObject(“WScript.Shell”)
‘получаем путь к нашему рабочему столу:
Set NShortcut = WshShell.CreateShortcut(DesktopPath & “\Блокнот.lnk”)
‘С помощью функции API «%windir%» получаем путь к папке
‘WINDOWS и Блокноту и помещаем полученный путь в
‘Устанавливаем обычный стиль окна:
‘Клавиши быстрого вызова:
‘Путь к файлу иконки:
NShortcut.IconLocation = «notepad.exe, 0»
‘Устанавливаем всплывающую подсказку:
NShortcut.Description = «Ярлык блокнота»
‘Устанавливаем в качестве рабочей папки — Рабочий стол:
‘Сохраняем настройки и сам ярлык:
Кроме ярлыков к локальным ресурсам можно создавать ярлыки Интернета. Создадим ярлык адреса компании Microsoft.
Dim WshShell, UrlLink
Set WshShell = WScript.CreateObject(«WScript.Shell»)
Set UrlLink = WshShell.CreateShortcut(«Microsoft.URL»)
Работа с ресурсами локальной сети
Работа с локальной сетью
При работе с локальной сетью наиболее часто решаются следующие задачи:
организация общих сетевых ресурсов;
подключение пользователей к ресурсам;
организация резервного копирования с одного компьютера в сети на другой.
Для доступа к сетевым ресурсам используются сетевые пути в следующем формате:
Например, сетевым именем Server1 имеется общедоступный принтер с сетевым именем Epson, то путь к нему указывается так: \\Server1\Epson.
Если на этом же компьютере имеется общедоступная папка Programs, то путь к ней выглядит как \\Server1\Programs, а путь к файлу в этой папке, например, так: \\Server1\Programs\Corel\Coreldrv.exe
Для работы с сетевой папкой, расположенной на сервере K2S, необходимо задать путь:
Объект WshNetwork
Объект WshNetwork используется для работы с сетью, установки конфигурации сетевого окружения — а именно для управления сетевыми дисками и принтерами.
Через объект WshNetwork можно получить информацию о локальном компьютере, подключаться к дискам и принтерам в сети, устанавливать принтер по умолчанию и отключаться от сетевых дисков и принтеров.
Для его использования объект нужно создать.
Set WshNetwork = CreateObject(«WScript.Network»)
Для получения информации о компьютере, можно получить его сетевые атрибуты: имя пользователя, имя компьютера и его домен.
Свойства объекта WshNetwork:
Сетевые диски
Для работы с сетевыми дисками Windows Script Host предоставляет несколько методов, которые позволяют получать сведения о подключенных сетевых дисках, подключать сетевые диски и отключаться от них.
У объекта WshNetwork имеется методы EnumNetworkDrives и EnumNetworkPrinterConnections, с помощью которых можно создать коллекции, содержащие сведения обо всех подключенных к локальной сети сетевых дисках и сетевых принтерах. Эти коллекции устроены следующим образом: первым элементом коллекции является буква диска или название порта, вторым – сетевое имя ресурса, с которым связан этот диск или принтер. Та же последовательность сохраняется для всех элементов коллекции.
EnumNetworkDrives — возвращает список подключенных сетевых дисков.
objDrives = object.EnumNetworkDrive
object — объект WshNetwork
objDrives — переменная, которой присваивается ссылка на коллекцию сетевых дисков
Dim WshNetwork, Drives
Set WshNetwork = WScript.CreateObject(«WScript.Network»)
Set Drives = WshNetwork.EnumNetworkDrives
WScript.Echo «Подключены сетевые диски: «
For i = 0 to Drives.Count — 1 Step 2
WScript.Echo «Диски » & Drives.Item(i) & » justify»> Next
MapNetworkDrive — назначает заданную букву сетевому диску.
WshNetwork.MapNetworkDrive strLocalName, strRemoteName, [bUpdateProfile], [strUser], [strPassword]
strLocalName — назначаемая буква сетевого диска
strRemoteName — удаленное имя
bUpdateProfile — логическая величина определяющая сохранять ли сделанную настройку в пользовательской конфигурации.
strUser, strPassword — вы можете указать имя и пароль для доступа к диску.
‘создаем объект WshNetwork:
Set WshNetwork = CreateObject(«WScript.Network»)
‘назначаем сетевой ресурс Server\PublicFiles как сетевой диск Z: WshNetwork.MapNetworkDrive «Z:», «\\Server\PublicFiles»
RemoveNetworkDrive — отключает сетевой диск
WshNetwork.RemoveNetworkDrive strName, [bForce], [bUpdateProfile]
strName — имя диска
bForce — логический параметр. Если принимает значение true, то сетевой диск отключается, даже если он в настоящий момент используется данным компьютером.
bUpdateProfile — логический параметр, указывающий, сохранить ли сделанную настройку в пользовательском профиле.
‘создаем объект WshNetwork:
Set WshNetwork = WScript.CreateObject(«WScript.Network»)
‘подключаем сетевой диск Z:
WshNetwork.MapNetworkDrive «Z:», «\\Server\PublicFiles»
‘отключаем сетевой диск Z:
При работе с сетевыми ресурсами могут возникать так называемые ошибки выполнения или исключения. Но это не те ошибки, когда вы забыли поставить закрывающую скобку, запятую или ошиблись в имени переменной. Это ошибки, возникающие в некоторых ситуациях во время выполнения сценария и зависящие от некоторых не регулярно возникающих обстоятельств. Например, для того, чтобы подключить сетевой диск к устройству Z: , нужно быть уверенным, что такая буква не использована ранее (иначе произойдет ошибка).
Режим обработки исключительных ситуаций в VBScript включается с помощью оператора On Error Resume Next. Если после этого при выполнении какого-либо оператора в сценарии произойдет ошибка, то выполнение передастся следующему оператору в тексте.
Для анализа ошибок используется объект Err. Это стандартный объект VBScript, содержащий информацию о так называемых run-time errors (ошибках времени выполнения). Свойство Source указывает на источник ошибки. Метод Clear очищает свойства объекта, удаляя сведения об ошибке. Помимо Source и Clear у объекта есть и другие свойства и методы, но реально может понадобиться, пожалуй, свойство Number и Description. Number возвращает код произошедшей ошибки, а Description ее описание.
Для отмены режима обработки исключений служит оператор On Error Goto 0.
Пример сценария с обработкой исключений :
‘ Создаем объект WshNetwork
Set WshNetwork = WScript.CreateObject(«WScript.Network»)
‘ Создаем объект WshShell
Set WshShell = WScript.CreateObject(«WScript.Shell»)
‘ Включаем обработку ошибок времени выполнения
On Error Resume Next
‘ Отключаем сетевой диск
If Err.Number<>0 Then
Info=»Ошибка при отключении диска » & Drive & vbCrLf & _
«Код ошибки: » & err.number & vbCrLf &+ _
WshShell.Popup Info,0,»Отключение сетевого диска»,vbCritical
Info=»Диск » & Drive & » отключен успешно»
WshShell.Popup Mess,0,»Отключение сетевого диска»,vbInformation
Работа с принтерами
Подобно работе с сетевыми дисками, WSH предоставляет для работы с сетевыми принтерами по сути те же методы.
EnumPrinterConnections – возвращает список подключенных принтеров
objPrinters = object.EnumPrinterConnections
object — объект WshNetwork
objPrinters — ссылка на коллекцию принтеров
AddPrinterConnection – подключает сетевой принтер.
WshNetworkt.AddPrinterConnection strLocalName, strRemoteName [,bUpdateProfile [,strUser][,strPassword]
strLocalName – назначаемое имя подключенному принтеру
strRemoteName — удаленное имя
bUpdateProfile — логическая величина (true или false),определяющая сохранять ли сделанную настройку в пользовательской конфигурации.
strUser, strPassword — вы можете указать имя и пароль для доступа к диску.
Set WshNetwork = CreateObject(«WScript.Network»)
WshNetwork.AddPrinterConnection «LPT1», “Server\\LaserJet1”
RemovePrinterConnection – отключат сетевой принтер.
WshNetwork.RemovePrinterConnection strName, [bForce], [bUpdateProfile]
strName — имя диска
bForce — логический параметр. Если принимает значение true, то сетевой принтер отключается, независимо от того, используется он в настоящий момент или нет.
bUpdateProfile — логический параметр, указывающий, сохранить ли сделанную настройку в пользовательском профиле.
Set WshNetwork = CreateObject(«WScript.Network»)
Кроме методов, подобных методам для работы с сетевыми дисками Windows Scripting Host для работы с принтерами предоставляет еще несколько.
AddWindowsPrinterConnections – устанавливает новый принтер в Windows.