WSH скрипты. Примеры.
Операции с переменными окружения.
Переменные окружения (переменные среды) содержат данные о настройках операционной системы
WINDOWS и о настройках пользователей. С выходом новых операционных систем список системных и локальных
переменных окружения может изменяться.Несмотря на то, что эта страница находится в разделе Примеры, в начале будет теоретическое вступление.
Ниже приведен список переменных окружения.
Название, тип | Описание |
|---|---|
| ALLUSERSPROFILE Тип - локальная |
Возвращает размещение профиля All Users. В Windows 7 возвращает путь к папке C:\ProgramData\. |
| APPDATA Тип -системная |
Возвращает используемое по умолчанию размещение данных приложений. В Windows XP это C:\Documents and Settings\%UserName%\Application Data. В Windows 7 - C:\Users\%UserName%\AppData\Roaming. |
| CD Тип -локальная | Указывает путь к текущему каталогу. |
| CLIENTNAME Тип - локальная динамическая |
Переменная определена только в среде удаленного подключения к рабочему столу. Хранит имя компьютера (%COMPUTERNAME%) клиента удаленного доступа. |
| CMDCMDLINE Тип - локальная |
Точная команда, использованная для запуска текущего cmd.exe. |
| CMDEXTVERSION Тип - системная | Версия текущего Command Processor Extensions. |
| COMMONPROGRAMFILES Тип - системная |
Расположение каталога "Common Files" (обычно %ProgramFiles%\Common Files). |
| COMMONPROGRAMFILES(x86) Тип - системная |
Расположение каталога "Common Files" в Program Files (x86) для 64-разрядной ОС (обычно %ProgramFiles(x86)%\Common Files). |
| COMPUTERNAME Тип - системная | Имя компьютера |
| COMSPEC Тип - системная | Путь к исполняемому файлу командного процессора (shell). |
| DATE Тип - системная |
Возвращает текущую дату. Использует тот же формат, что и команда date /t. Создаётся командой Cmd.exe. |
| ERRORLEVEL Тип - системная |
Возвращает код ошибки последней использовавшейся команды. |
| HOMEDRIVE Тип - системная |
Возвращает имя диска локальной рабочей станции, связанного с основным каталогом пользователя. Задаётся на основании расположения основного каталога. Основной каталог пользователя указывается в оснастке «Локальные пользователи и группы». |
| HOMEPATH Тип - системная |
Возвращает полный путь к основному каталогу пользователя. Задаётся на основании расположения основного каталога. Основной каталог пользователя указывается в оснастке «Локальные пользователи и группы». |
| HOMESHARE Тип - системная |
Возвращает сетевой путь к общему основному каталогу пользователя. Задаётся на основании расположения основного каталога. Основной каталог пользователя указывается в оснастке «Локальные пользователи и группы». |
| LOCALAPPDATA Тип - системная |
Возвращает используемое по умолчанию локальное размещение данных приложений (C:\Users\%UserName%\AppData\Local. |
| LOGONSERVER Тип - локальная |
Имя контроллера домена, использовавшегося для авторизации текущего пользователя. |
| NUMBER_OF_PROCESSORS Тип - системная |
Количество процессоров в системе (фактически, количество ядер). |
| OS Тип - системная |
Название операционной системы. Windows XP и Windows 2000 отображаются как Windows_NT. |
| PATH Тип - системная | Указывает путь поиска исполняемых файлов. |
| PATHEXT Тип - системная |
Возвращает список расширений файлов, которые рассматриваются операционной системой как исполняемые. |
| PROCESSOR_ARCHITECTURE Тип - системная |
Архитектура процессора. Возможные варианты: x86, IA64, AMD64. |
| PROCESSOR_IDENTIFIER Тип - системная | Описание процессора. |
| PROCESSOR_LEVEL Тип - системная | Номер модели процессора. |
| PROCESSOR_REVISION Тип - системная | Ревизия процессора. |
| PROGRAMDATA Тип - системная |
Возвращает путь к каталогу C:\ProgramData\ (аналогично ALLUSERSPROFILE). |
| PROGRAMFILES Тип - системная |
Путь к каталогу Program Files. |
| PROGRAMFILES(x86) Тип - системная |
Путь к каталогу Program Files (x86) в 64-разрядных системах для приложений архитектуры x86. |
| PROMPT Тип - локальная |
Возвращает параметры командной строки для текущего интерпретатора. Создаётся командой Cmd.exe. |
| PUBLIC Тип - системная |
В Windows 7 возвращает путь к каталогу C:\Users\Public. |
| RANDOM Тип - системная | Случайное десятичное число от 0 до 32767. Генерируется Cmd.exe. |
| SESSIONNAME Тип - локальная |
Хранит имя активного пользовательского сеанса. При локальном входе имеет значение "Console", при удаленном доступе имеет вид RDP-Tcp#<номер сеанса> |
| SYSTEMDRIVE Тип - системная |
Диск, на котором расположен корневой каталог Windows. |
| SYSTEMROOT Тип - системная | Путь к корневому каталогу Windows. |
| TEMP и TMP Тип - системная и локальная |
Возвращает временные каталоги, по умолчанию используемые приложениями, которые доступны пользователям, выполнившим вход в систему. Некоторые приложения требуют переменную TEMP, другие — переменную TMP. Потенциально TEMP и TMP могут указывать на разные каталоги, но обычно совпадают. |
| TIME Тип - системная |
Возвращает текущее время. Использует тот же формат, что и команда time /t. Создаётся командой Cmd.exe. |
| USERDOMAIN Тип - локальная |
Имя домена, которому принадлежит текущий пользователь. |
| USERNAME Тип - локальная | Имя текущего пользователя. |
| USERPROFILE Тип - локальная | Путь к профилю текущего пользователя. |
| WINDIR Тип - системная | Каталог, в котором установлена Windows. |
И еще ряд замечаний:
- В отличие от UNIX систем, где процесс получает копию переменных окружения, в WINDOWS системах процесс получает доступ к самим переменным окружения. Т. е. изменения, сделанные одним процессом, будут доступны другим процессам.
- Длина переменных окружения зависит от того, чем они создаются. Так, при создании переменных окружения средствами WSH их длина не должна превышать 2048 байт (включая завершающий NULL-символ).
Рассмотрим средства Windows Script Host (WSH) для работы с переменными окружения (переменными среды).
Свойство Environment объекта WScript.Shell позволяет работать с переменными окружения Windows.
Доступны следующие операции: просмотр значений, добавить переменную, изменить значение и удалить переменную окружения. А больше и не придумать)).
Свойство Environment([strType])
где strType - тип переменных окружения.
Возможные значения:
Тип | Описание |
|---|---|
| System | Системные переменные окружения |
| User | Пользовательские переменные окружения |
| Volatile | Временные переменные окружения |
| Process | Переменные окружения текущего командного окна |
С помощью свойства Environment объекта WshShell создается объект WshEnvironment. Он позволяет получить доступ к коллекции, содержащей переменные среды заданного типа.
Объект WshEnvironment обладает следующими свойствами и методом:
Свойства | Описание |
|---|---|
| Item | Получает или устанавливает значение указанной переменной окружения |
| Count | Количество перечисленных элементов |
| Length | Количество перечисленных элементов (JScript) |
Метод | Описание |
| Remove | Удаляет указанную переменную окружения |
Метод ExpandEnvironmentStrings объекта WshShell.
Возвращает значение переменной среды текущего командного окна (Process), заданной строкой (имя переменной должно быть окружено знаками "%", не чувствительно к регистру).
На этом краткое теоретическое вступление закончим и перейдем к практическим вопросам.
Получить значение переменой окружения текущего командного окна.
var wshShell = WScript.CreateObject("WScript.Shell");
winDir = wshShell.ExpandEnvironmentStrings("%WinDir%");
WScript.Echo (winDir);
В следующих примерах будет использовано свойства Environment объекта WshShell так как оно позволяет получить доступ ко всем переменным окружения.
Вывести все значения переменных окружения.
var wshEnviromentUser, wshEnum;
var wshShell = WScript.CreateObject("WScript.Shell");
var strRez='';
wshEnviromentUser = wshShell.Environment("USER");
wshEnum = new Enumerator (wshEnviromentUser);
for (; !wshEnum.atEnd(); wshEnum.moveNext())
strRez+=wshEnum.item()+"\n";
WScript.Echo (strRez);
Если в предыдущем примере вместо USER поставить например, SYSTEM, то будут выведены все системные переменные окружения и их значения.
Добавить переменную и ее значения в список переменных окружения.
var wshEnviromentUser;
var wshShell = WScript.CreateObject("WScript.Shell");
wshEnviromentUser = wshShell.Environment("USER");
wshEnviromentUser("my_super_var") = "NEW";
В списке пользовательских переменных окружения появится переменная my_super_var со значением "NEW". Вы можете убедиться в этом, запустив пример вывода всех значений пользовательских переменных окружения.
Удалить переменную из списка переменных окружения.
var wshEnviromentUser;
var wshShell = WScript.CreateObject("WScript.Shell");
wshEnviromentUser = wshShell.Environment("USER");
wshEnviromentUser.Remove("my_super_var");
Здесь использовался метод Remove(strName) для удаления переменной окружения.
Изменить переменную из списка переменных окружения.
Для выполнения этой операции необходимо произвести те же действия, что и при создании новой переменной окружения.
var wshEnviromentUser;
var wshShell = WScript.CreateObject("WScript.Shell");
wshEnviromentUser = wshShell.Environment("USER");
wshEnviromentUser("my_super_var") = "OLD";
Что бы убедиться в том, что значение изменилось, можно запустить пример вывода всех значений пользовательских переменных окружения.
Необходимо учитывать, что переменные текущего пользователя, имеют приоритет над системными.
Если говорить о операциях с переменными окружения вне связи с WSH то следовало бы упомянуть место, где эти переменные живут.
[HKEY_CURRENT_USER\Environment]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\
Session Manager\Environment]
Для изменения переменных окружения соответственно можно использовать команду Cmd Reg
REG ADD "HKEY_CURRENT_USER\Environment"
/v my_var /t REG_EXPAND_SZ /d "Best"
или, что гораздо более правильно, команду SetX.
Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуетс¤ регистраци¤).





