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