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.
Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуетс¤ регистраци¤).