Wsh скрипти

WSH скрипти. Приклади.

Тут будуть розглянуті різні приклади Windows Script Host (WSH) скриптів.

властивість Environment

Повертає об'єкт, який дозволяє отримати значення змінних середовища

var f1 = WScript.CreateObject ( "WScript.Shell"); var f2 = f1.Environment ( "Process"); WScript.Echo (f2 ( "windir"));

Властивість SpecialFolders.

Повертає шлях до спеціальних папках.
Можливо отримати шлях до наступних папках:
AllUsersDesktop, AllUsersStartMenu, AllUsersPrograms, AllUsersStartup, Desktop, Favorites, Fonts, MyDocuments, NetHood, PrintHood, Programs, Recent, SendTo, StartMenu, Startup, Templates.
Приклад використання:

var f1 = WScript.CreateObject ( "WScript.Shell"); var f3 = f1.SpecialFolders ( "AllUsersDesktop"); WScript.Echo (f3);


Приклад WSH скрипта копіювання файлу.


Наступний приклад створює ярлик URL на робочому столі


WSH скрипт може встановити новий принтер в Windows, ініціювати установку драйверів.

// JScript. var net; net = new ActiveXObject ( "WScript.Network"); net.AddWindowsPrinterConnection ( "\\\\ ServerName \\ PrinterName");


У цьому прикладі WSH скрипт привласнює призначену користувачем букву мережевого диску

// JScript. var net; net = new ActiveXObject ( "WScript.Network"); net.MapNetworkDrive ( "I:", "\\\\ computer2 \\ public", "True");


У наступному прикладі ми розглянемо важливу практичну задачу: вибрати засобами windows папку і передати в bat / cmd файл ім'я папки і шлях до неї.

FOR / F "usebackq delims =" %% i IN ( `cscript // nologo foldsel.js`) do set sfold = %% i if defined sfold (echo Select folder: [% sfold%].) Else (echo No select folder)


Цей же приклад можна записати і так


Згорнути всі вікна робочого столу Windows

var f1 = WScript.CreateObject ( "Shell.Application"); f1.MinimizeAll ();


Розгорнути всі вікна робочого столу Windows


Запуск провідника Windows з певною відкритою папкою.

var f1 = WScript.CreateObject ( "Shell.Application"); f1.Explore ( "d: \\ 00tt");


Визначити обсяг оперативної пам'яті

var f1 = WScript.CreateObject ( "Shell.Application"); WScript.Echo (f1.GetSystemInformation ( "PhysicalMemoryInstalled"));


Виклик вікна "Запуск програми"

var f1 = WScript.CreateObject ( "Shell.Application"); f1.FileRun ();


Виклик вікна виключення і перезавантаження комп'ютера

var f1 = WScript.CreateObject ( "Shell.Application"); f1.ShutdownWindows ();


Виклик вікна із мережею Панелі управління

var f1 = WScript.CreateObject ( "Shell.Application"); f1.ControlPanelItem ( "ncpa.cpl");


Виклик вікна Internet properties

var f1 = WScript.CreateObject ( "Shell.Application"); // Internet properties f1.ControlPanelItem ( "Inetcpl.cpl");


Виклик вікна Regional Settings properties

var f1 = WScript.CreateObject ( "Shell.Application"); // Regional Settings properties f1.ControlPanelItem ( "ntl.cpl");


Виклик вікна Network properties

var f1 = WScript.CreateObject ( "Shell.Application"); // Network properties f1.ControlPanelItem ( "Netcpl.cpl");


Виклик вікна Password properties

var f1 = WScript.CreateObject ( "Shell.Application"); // Password properties f1.ControlPanelItem ( "Password.cpl");


Виклик вікна System properties and Add New Hardware wizard

var f1 = WScript.CreateObject ( "Shell.Application"); // System properties and Add New Hardware wizard f1.ControlPanelItem ( "Sysdm.cpl");


Виклик вікна Desktop Themes

var f1 = WScript.CreateObject ( "Shell.Application"); // Desktop Themes f1.ControlPanelItem ( "Themes.cpl");


Виклик вікна Date / Time properties

var f1 = WScript.CreateObject ( "Shell.Application"); // Date / Time properties f1.ControlPanelItem ( "TimeDate.cpl");


Виклик аплету можна виробляє безпосередньо використовуючи Rundll32.exe. Тоді, наприклад, виклик вікна установки дати і часу може виглядати так:

WshShell = WScript.CreateObject ( "WScript.Shell"); WshShell.Run ( "Rundll32.exe shell32.dll, Control_RunDLL timedate.cpl");


На сторінці з описом команди Rundll32 можна знайти велику кількість прикладів її використання. Отже, помінявши в прикладі, наведеному вище, останній рядок можна отримати всі ці можливості з WSH.
У наступному прикладі відкривається вікно браузера з необхідною сторінкою.


Приклад WSH скрипта виклику вікна провідника Windows "пошук комп'ютера"

var f1 = WScript.CreateObject ( "Shell.Application"); f1.FindComputer ();


Висновок модального вікна з заголовком вікна, текстом питання і кнопками ТАК і НІ. Так само визначено термін, після закінчення якого вікно буде примусово закрито (код повернення -1).

var f1 = WScript.CreateObject ( "WScript.Shell"); var f3 = f1.Popup ( "Ви розумієте про що йде мова?", 80, "Контрольне питання", 4 + 32); WScript.Echo (f3);


Вибір файлу через провідник

var objDialog = new ActiveXObject ( 'UserAccounts.CommonDialog'); objDialog.Filter = "WSH скрипти (* .vbs, * .js) | * .vbs; *. js | Всі файли (*. *) | *. *"; objDialog.InitialDir = "c:"; var intResult = objDialog.ShowOpen (); if (intResult == 0) WScript.quit (); else WScript.Echo (objDialog.FileName);


Визначити дату установки Windows


Видати звук (гудок) динаміком.

var WshShell = WScript.CreateObject ( "WScript.Shell"); WshShell.Run ( "% comspec% / c echo" + String.fromCharCode (7), 0, true);


або те ж саме на VBS

Set WshShell = CreateObject ( "WScript.Shell") WshShell.Run "% comspec% / c echo" Chr (7), 0, True


У наступному прикладі WSH скрипт через командний процесор (cmd) викликає команду dir і далі обробляє результати її роботи. Сам приклад можливо і не так так вже цікавий (хоча таке завдання, як вибір файлів з папки по масці відсортованих за датою не настільки вже й тривіальна для скрипта), а ось можливість обробки StdIn, StdOut і StdErr відкриває додаткові перспективи.

var sh = new ActiveXObject ( 'WScript.Shell'); var ex = sh.Exec ( 'cmd / c dir / B / O: -D "C: \\ Windows \\ System32 \\ *. sys"'); var stdout = []; var stderr = []; while (true) if (. ex.StdErr.AtEndOfStream) if (ex.Status == 1) > WScript.Echo ( '\ nEXIT CODE: \ n' + ex.ExitCode); WScript.Echo ( '\ nSTDERR: \ n' + stderr.join ( '\ n')); WScript.Echo ( '\ nSTDOUT: \ n' + stdout.join ( '\ n')); WScript.Quit ();


Ще один приклад WSH скрипта для роботи з StdIn і StdOut. Цього разу на VBS.

Set WshShell = CreateObject ( "WScript.Shell") Set WshExec = WshShell.Exec ( "nslookup") Set InStream = WshExec.StdIn InStream.WriteLine "help" InStream.WriteLine "exit" Set OutStream = WshExec.StdOut Str = vbNullString While Not OutStream.AtEndOfStream Str = Str Trim (OutStream.ReadLine ()) vbCrLf Wend MsgBox Str


Ще один приклад WSH скрипта, який запускає зовнішню програму з параметром і обробляє висновок цієї програми:


Якщо в попередньому прикладі використовувати іншу команду, то при російської локалізації можуть виникнути складності через те, що висновок команди здійснюється в DOS кодуванні. У такому випадку при необхідності виведення рядок слід перекодувати в WIN (одна тисяча двісті п'ятьдесят одна) кодування. Використовуємо для цього функцію, написану на VBS.


Кілька прикладів як з Windows Script Host (WSH) створювати ярлики.

var WshShell, myShortcut; // Створюємо об'єкт WshShell WshShell = WScript.CreateObject ( "WScript.Shell"); // Визначаємо шлях до робочого столу pathDesktop = WshShell.SpecialFolders ( "Desktop"); // Створюємо ярлик на робочому столі myShortcut = WshShell.CreateShortcut (pathDesktop + "\\ notepad.lnk"); // Встановлюємо шлях до файлу myShortcut.TargetPath = WshShell.ExpandEnvironmentStrings ( "% windir% \\ notepad.exe"); // Призначаємо робочий каталог myShortcut.WorkingDirectory = "c: \\ temp"; // Вказуємо аргументи командного рядка myShortcut.Arguments = "d: \\ myscript \\ MakeShortcut.js"; // Вибираємо іконку з файлу notepad.exe myShortcut.IconLocation = "notepad.exe, 0"; // Зберігаємо ярлик myShortcut.Save ();

Наступний приклад демонструє як Windows Script Host (WSH) може створювати ярлики для мережевих ресурсів.


Кілька прикладів як з Windows Script Host (WSH) виконувати запити Windows Management Instrumentation (WMI) і обробляти результати.


Трохи змінимо запит) - і отримуємо список процесів на комп'ютері

// Підключилися до WMI локального комп'ютера ( ".") Var root = GetObject ( "winmgmts: \\\\. \\ root \\ cimv2"); // Виконали запит на отримання всіх процесів на комп'ютері var reswmi = root.ExecQuery ( "Select * from Win32_Process"); // Вивели їх імена var s = ""; for (var acc = new Enumerator (reswmi);! acc.atEnd (); acc.moveNext ()) s = s + acc.item (). Name + "\ n"; WScript.Echo (s);


У наступному прикладі WSH використовуючи запит до WMI отримує список логічних дисків. Так, в WSH є власні методи для цього, і, як мені здається, вони більш доречні для такого випадку. Тут просто розглянута ще одна можливість.

// Підключилися до WMI локального комп'ютера ( ".") Var root = GetObject ( "winmgmts: \\\\. \\ root \\ cimv2"); // Виконали запит на отримання логічних дисків на комп'ютері var reswmi = root.ExecQuery ( "Select * from Win32_LogicalDisk"); // Вивели їх імена var s = ""; for (var acc = new Enumerator (reswmi);! acc.atEnd (); acc.moveNext ()) s = s + acc.item (). DeviceID + "" + acc.item (). VolumeName + "" + acc.item (). Description + "" + acc.item (). VolumeSerialNumber + "\ n"; WScript.Echo (s);


Приклад отримання відомостей про операційну систему. WSH + WMI.

// Підключилися до WMI локального комп'ютера ( ".") Var root = GetObject ( "winmgmts: \\\\. \\ root \\ cimv2"); // Виконаємо запит на отримання відомостей про операційну систему var reswmi = root.ExecQuery ( "SELECT * FROM Win32_OperatingSystem"); var accitem; for (var acc = new Enumerator (reswmi);! acc.atEnd (); acc.moveNext ()) accitem = acc.item (); var s = 'короткий опис версії операційної системи' + accitem.Caption + "\ r \ n" + "номер билда операційної системи '+ accitem.BuildNumber +" \ r \ n "+" номер версії операційної системи "+ accitem.Version + "\ r \ n" + 'ім'я операційної системи' + accitem.Name + "\ r \ n" + 'тип операційної системи:' + accitem.OSType + "\ r \ n" + 'версія сервіс-пака' + accitem.ServicePackMajorVersion + "\ r \ n" + 'мову операційної системи' + accitem.OSLanguage + "\ r \ n" + "код регіону, який використовує операційна система '+ accitem.CountryCode +" \ r \ n "+" ідентифікатор мови, використовуваного операційною системою '+ accitem.Locale + "\ r \ n" + "дата-час установки' + accitem.InstallDate +" \ r \ n "+ 'ім'я компь ютера '+ accitem.CSName + "\ r \ n" +' організація, на яку зареєстрована операційна система '+ accitem.Organization + "\ r \ n" + "серійний номер' + accitem.SerialNumber +" \ r \ n " + 'зареєстрований користувач операційної системи' + accitem.RegisteredUser + "\ r \ n" + "тимчасова зона; число хвилин зміщення від часу за Гринвічем '+ accitem.CurrentTimeZone + "\ r \ n" + "дата + час останнього завантаження' + accitem.LastBootUpTime +" \ r \ n \ r \ n "; WScript.Echo (s);

WSH + WMI. клас Win32_ComputerSystem

// Підключилися до WMI локального комп'ютера ( ".") Var root = GetObject ( "winmgmts: \\\\. \\ root \\ cimv2"); var reswmi = root.ExecQuery ( "SELECT * FROM Win32_ComputerSystem"); var accitem; for (var acc = new Enumerator (reswmi);! acc.atEnd (); acc.moveNext ()) accitem = acc.item (); var s = 'ім'я комп'ютера' + accitem.Caption + "\ r \ n" + "домен '+ accitem.Domain +" \ r \ n "+' роль комп'ютера в домені '; if (accitem.DomainRole == 0) s + = 'Standalone Workstation'; if (accitem.DomainRole == 1) s + = 'Member Workstation'; if (accitem.DomainRole == 2) s + = 'Standalone Server'; if (accitem.DomainRole == 3) s + = 'Member Server'; if (accitem.DomainRole == 4) s + = 'Backup Domain Controller'; if (accitem.DomainRole == 5) s + = 'Primary Domain Controller'; s + = '\ r \ n'; s + = 'всього фізичної пам'яті (байт)' + accitem.TotalPhysicalMemory + "\ r \ n"; WScript.Echo (s);


Наступний приклад використання WMI в WSH - визначити встановлені кодеки.

Для питань, обговорень, зауважень, пропозицій і т. П. Можете використовувати розділ форуму цього сайту (потрібна реєстрація).

Схожі статті