Объект WScript.Shell свойство Environment — Переменные окружения Windows

Объект WScript.Shell свойство Environment — Переменные окружения Windows Объектная модель Windows Script Host

Всем доброго дня, с вами автор блога scriptcoding.ru. Сегодня мы рассмотрим работу с переменными окружения Windows, а именно: теоретические основы и программный код для написания сценариев.

Переменные окружения Windows – теоретические основы

Переменные среды – Это по своей природе простые текстовые строки, которые позволяют хранить системную или пользовательскую информацию. Оны нужны, что бы быстро получить доступ к нужному ресурсу в операционной системе windows или системному значению. Все среды разделяют на два типа:

  • Системные – Данный тип создается автоматически операционной системой, они доступны для всех пользователей. Информация хранится в реестре, в большинстве случаев, что бы изменения вступили в силу, нужно произвести перезапуск операционной системы.
  • Пользовательские – Данный тип создается конкретным пользователей, поэтому информация доступна в большинстве случаев только для того пользователя, которые ее записал. В отличии от системных сред, пользовательские переменные окружения ОС Windows вступают сразу в силу, однако, нужно перезапустить те приложения, которые будут их использовать.
переменные среды системы windows

Доступ к средам в Windows XP осуществляется через значок «мой компьютер«: нажимаем правой кнопкой мыши по значку и из контекстного меню выбираем пункт "Свойства», далее переходим на вкладку «Дополнительно» и там нажимаем на кнопку «переменные_среды«. Частично, работу с переменными окружения Windows я рассмотрел в статье «Урок 4 по CMD — переменные окружения«.

Переменные среды Windows – практическая часть

Переменные окружения системы Windows

Хорошо, теперь давайте перейдем непосредственно к основной части статьи. Мы рассмотрим объект WScript.Shell, его свойство Environment позволяет работать с переменными окружения Windows:

Environment([strType]) – По умолчанию, данное свойство предоставляет доступ ко всем переменным окружения Windows типа System, но можно задать и другой тип, их всего четыре:

  • "System" – системные переменные_среды, создаются самой операционной системой Windows.
  • "User" – переменные_среды пользователя.
  • "Volatile" – временные_переменные.
  • "Process" – переменные_среды текущего командного окна.

И так, переменная среда Windows, это переменная, которая хранится в самой системе, она может быть временной, системной или, может быть создана пользователем. Так, благодаря переменным окружения Windows мы можем через меню Пуск/Выполнить запускать командную строку или калькулятор (все то, что лежит в системных каталогах) не вводя полного пути. Также, Windows переменные окружения хранят информацию о процессоре, профиле пользователя и многое другое.

Давайте напишем простой сценарий на языке vbscript для лучшего понимания ситуации:

'*********************************************
' wscript_shell_environment
' Переменные среды Windows
' environment.vbs
'**********************************************
Option Explicit
 
dim WshShell, index
dim WshEnvirSys, WshEnvirUsr, WshEnvirVol, WshEnvirProc
dim s, u, v, p
s = ""
v = ""
u = ""
p = ""
 
' формируем ссылку на объект
set WshShell = WScript.CreateObject("WScript.Shell")
 
' тип SYSTEM
set WshEnvirSys = WshShell.Environment
' тип USER
set WshEnvirUsr = WshShell.Environment("USER")
' тип VOLATILE
set WshEnvirVol = WshShell.Environment("VOLATILE")
' тип PROCESS
set WshEnvirProc = WshShell.Environment("PROCESS")
 
For Each index In WshEnvirSys
s = s & index & vbCrLf
Next
 
For Each index In WshEnvirUsr
u = u & index & vbCrLf
Next
 
For Each index In WshEnvirVol
v = v & index & vbCrLf
Next
 
For Each index In WshEnvirProc
p = p & index & vbCrLf
Next
 
MsgBox "Системные:" & vbCrLf & vbCrLf& s
MsgBox "Пользовательские:" & vbCrLf & vbCrLf & u
MsgBox "Временные:" & vbCrLf & vbCrLf & v
MsgBox "Текущий процесс:" & vbCrLf & vbCrLf & p

Видим, что WshShell хранит ссылку на объект WScript.Shell, WshEnvirSys хранит ссылку на коллекцию переменных окружения Windows типа SYSTEM, WshEnvirUsr – USER, WshEnvirVol – VOLATILE и WshEnvirProc – PROCESS. Видим, что при создании ссылки на объект или коллекцию в языке vbscript используется ключевое слово set. Далее мы используем цикл For Each для перебора элементов коллекции и формирования списка. Списки выводятся в конце сценария с помощью функции MsgBox.

А вот аналогичный пример, но уже на языке jscript:

//*********************************************
// wscript_shell_environment
// Переменные среды Windows
// environment.js
//**********************************************
 
var WshShell2;
var WshEnvirSys, WshEnvirUsr1, WshEnvirVol, WshEnvirProc;
var s="", u="", v="", p="";
 
// формируем ссылку на объект
WshShell2 = WScript.CreateObject("WScript.Shell")
 
// тип SYSTEM
WshEnvirSys = new Enumerator(WshShell2.Environment("SYSTEM"));
// тип USER
WshEnvirUsr1 = new Enumerator(WshShell2.Environment("USER"));
// тип VOLATILE
WshEnvirVol = new Enumerator(WshShell2.Environment("VOLATILE"));
// тип PROCESS
WshEnvirProc = new Enumerator(WshShell2.Environment("PROCESS"));
 
for (; !WshEnvirSys.atEnd(); WshEnvirSys.moveNext())
s+=WshEnvirSys.item()+"\n";
for (; !WshEnvirUsr1.atEnd(); WshEnvirUsr1.moveNext())
u+=WshEnvirUsr1.item()+"\n";
for (; !WshEnvirVol.atEnd(); WshEnvirVol.moveNext())
v+=WshEnvirVol.item()+"\n";
for (; !WshEnvirProc.atEnd(); WshEnvirProc.moveNext())
p+=WshEnvirProc.item()+"\n";
 
WScript.Echo ( "Системные:\n\n" + s);
WScript.Echo ( "Пользовательские:\n\n" + u);
WScript.Echo ( "Временные:\n\n" + v);
WScript.Echo ( "Текущий процесс:\n\n" + p);

Хорошо, у коллекции wscript shell environment есть свойство length, которое хранит в себе число всех элементов, метод Remove(strName) позволяет удалить переменную окружения ОС Windows, которая задана строковым параметром strName.

Хорошо, давайте рассмотрим следующий пример на языке vbscript:

'*********************************************
' wscript_shell_environment
' Переменные окружения ОС Windows
' environment_1.vbs
'**********************************************
Option Explicit
 
dim WshShell1, index, u
dim WshEnvirUsr, WshEnvirProc
 
' формируем ссылку на объект
set WshShell1 = WScript.CreateObject("WScript.Shell")
set WshEnvirUsr = WshShell1.Environment("USER")
 
u = "Количество: " & vbTab & WshEnvirUsr.Length & vbCrLf & vbCrLf
 
For Each index In WshEnvirUsr
u = u & index & vbCrLf
Next
 
MsgBox u
 
'************************************************************************
' Создаем переменную_окружения с именем my_usr_var
' и значением "простой текст"
'************************************************************************
 
WshEnvirUsr("my_usr_var") = "простой текст"
u = "Количество: " & vbTab & WshEnvirUsr.Length & vbCrLf & vbCrLf
 
For Each index In WshEnvirUsr
u = u & index & vbCrLf
Next
 
MsgBox u
 
'***********************************
' Удаляем my_usr_var
'***********************************
WshEnvirUsr.Remove("my_usr_var")
 
u = "Количество: " & vbTab & WshEnvirUsr.Length & vbCrLf & vbCrLf
 
For Each index In WshEnvirUsr
u = u & index & vbCrLf
Next
 
MsgBox u

В этом примере по wscript shell environment свойству мы создали собственную переменную среду my_usr_var, записав в нее текстовую строку. Перед этим, мы вывели общее количество всех сред.

Скачать архив с примерами

А вот аналогичный пример на языке jscript:

//*********************************************
// wscript_shell_environment
// Переменные окружения ОС Windows
// environment_1.js
//**********************************************
 
var WshShell1, u
var WshEnvirUsr2, WshEnvirProc
 
// формируем ссылку на объект
WshShell1 = WScript.CreateObject("WScript.Shell");
 
WshEnvirUsr2 = WshShell1.Environment("USER");
WshEnum = new Enumerator (WshEnvirUsr2);
 
u = "Количество:\t" + WshEnvirUsr2.Length + "\n\n";
 
for (; !WshEnum.atEnd(); WshEnum.moveNext())
u+=WshEnum.item()+"\n";
 
WScript.Echo (u);
 
//************************************************************************
// Создаем переменную_окружения с именем my_usr_var
// и значением "простой текст"
//************************************************************************
 
WshEnvirUsr2("my_usr_var_1") = "простой текст";
WshEnum = new Enumerator (WshEnvirUsr2);
u = "Количество:\t" + WshEnvirUsr2.Length + "\n\n";
 
for (; !WshEnum.atEnd(); WshEnum.moveNext())
u+=WshEnum.item()+"\n";
 
WScript.Echo (u);
 
//***********************************
// Удаляем my_usr_var
//***********************************
WshEnvirUsr2.Remove("my_usr_var_1");
WshEnum = new Enumerator (WshEnvirUsr2);
u = "Количество:\t" + WshEnvirUsr2.Length + "\n\n";
 
for (; !WshEnum.atEnd(); WshEnum.moveNext())
u+=WshEnum.item()+"\n";
 
WScript.Echo (u);

И так, в этой статье мы рассмотрели работу со свойством Environment класса WScript.Shell. Подписывайтесь на обновление блога, что бы быть в курсе новых материалов.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий