Объект WScript.Shell метод Run — запуск внешних программ

Доброго времени суток всем читателям блога scriptcoding.ru. В этой статье мы подробно рассмотрим метод Run Wscript.Shell объекта. Данный метод служит для запуска внешних приложений из тела сценариев Windows Script Host.

Введение

BASH — Bourne-Again SHell (что может переводится как «перерожденный шел», или «Снова шел Борна(создатель sh)»), самый популярный командный интерпретатор в юниксоподобных системах, в особенности в GNU/Linux. Ниже приведу ряд встроенных команд, которые мы будем использовать для создания своих скриптов.

  • break выход из цикла for, while или until
  • continue выполнение следующей итерации цикла for, while или until
  • echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода
  • exit выход из оболочки
  • export отмечает аргументы как переменные для передачи в дочерние процессы в среде
  • hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении
  • kill посылает сигнал завершения процессу
  • pwd выводит текущий рабочий каталог
  • read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\
  • return заставляет функцию оболочки выйти с указанным значением
  • shift перемещает позиционные параметры налево
  • test вычисляет условное выражение
  • times выводит имя пользователя и системное время, использованное оболочкой и ее потомками
  • trap указывает команды, которые должны выполняться при получении оболочкой сигнала
  • unset вызывает уничтожение переменных оболочки
  • wait ждет выхода из дочернего процесса и сообщает выходное состояние.

И конечно же кроме встроенных команд мы будем использовать целую кучу внешних, отдельных команд-программ, с которыми мы познакомимся уже в процессе

WScript Shell Run

Хорошо, теперь давайте посмотрим на еще один пример на языке vbscript.

‘******************************************************* ‘ метод wscript run ‘ Запуск бл0кн0та и передача ему текста ‘ wscript_ ‘******************************************************* Option Explicit dim WshShell ‘ Создаем ссылку на WscriptShell set WshShell = WScript.CreateObject("") ‘ Открываем текстовый редактор и вставляем в него содержимое сценария " " & ,1,true MsgBox "Мы открывали текстовый редактор"

В этом примере мы также запустили приложение notepad, но, не прописывали путь к нему. Дело в том, что команда Run объекта работает как команда «Windows Пуск/Выполнить«, и при запуске приложения, сперва идет его поиск в переменных средах Windows, в которые, и входит папка System32. Также видим, что мы передали программе содержимое нашего сценария (строка ), фактически, скопировали в него весть текст скрипта.

Ну и напоследок, аналогичный пример, но уже на языке jscript:

WScript Shell Run

//******************************************************* // метод wscript run // Запуск бл0кн0та ему текста // wscript_ //******************************************************* var WshShell; // Создаем ссылку на WscriptShell WshShell = WScript.CreateObject(""); // Открываем текстовый редактор и вставляем в него содержимое сценария WshShell.Run (" " + WScript.ScriptFullName,1,true); WScript.Echo ("Это был запуск текстового редактора");

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

И так, давайте все подытожим… В этой статье мы разобрали метод Run класса Wscript Shell, который позволяет запускать заданное приложение, и передавать ему нужные параметры, так, мы можем открыть текстовый редактор и вставить в него нужный текст. Аналогично, можно использовать и метод Exec, который тоже позволяет запускать исполняемый файл, но в отличии от метода Run, он позволяет контролировать работу исполняемого файла.

Статус выхода

Каждая команда оболочки возвращает код выхода, когда она завершается успешно или безуспешно.

По соглашению нулевой код выхода указывает, что команда завершилась успешно, а ненулевое значение означает, что произошла ошибка.

Специальная переменная $? возвращает статус выхода последней выполненной команды:

date &> /dev/nullecho $?

Команда date завершена успешно, код выхода равен нулю:

Если вы попытаетесь запустить ls в несуществующем каталоге, код выхода будет отличным от нуля:

ls /nonexisting_dir &> /dev/nullecho $?

Код состояния можно использовать для выяснения причины сбоя команды. На странице руководства каждой команды содержится информация о кодах выхода.

При выполнении многокомандного конвейера статус выхода конвейера соответствует состоянию последней команды:

sudo tcpdump -n -l | tee $?

В приведенном выше примере echo $? напечатает код выхода команды tee .

Система

Информация о системе

С этими командами вы с легкостью получите все подробности о компьютере:

uname -a # показывает информацию о системе (kernel, architecture…) sudo lshw # (только для Linux) предоставляет информацию об аппаратном обеспечении sudo lshw -short # (только для Linux) краткая информацию об аппаратном обеспечении lscpu # (только для Linux) Показывает информацию о ЦП lsusb # (только для Linux) вывод информации о подключенном USB устройстве date # выводит дату и время

Работам с процессами

Следующие команды предоставляют общие сведения о всех процессах, происходящих в системе. В macOS и некоторых дистрибутивах Linux htop не установлен, поэтому перед использованием нужно установить его с помощью стандартного менеджера пакетов (для macOS  — Homebrew):

ps # показывает текущие процессы, происходящие в терминальном сеансе

ps aux # показывает все процессы, происходящие на компьютере

htop # отображает в терминале монитор активности

Система

Команда htop в Linux

Смена пользователей

При открытии терминального окна все вводимые команды выполняются под текущим пользователем. Однако зачастую приходится выполнять команды от привилегированного пользователя, поэтому важно знать, как их сменять внутри оболочки.

su # смена текущего пользователя на администратора(root) su — # смена текущего пользователя на администратора(root), со сменой локальных переменных su maria # смена текущего пользователя на «maria» sudo nano # выполнить команду «nano» от имени администратора (root)

Копирование и вставка в буфер обмена

Вы можете скопировать и вставить текст из/в терминал, выделив их и нажав Ctrl + C или Ctrl + V. Но иногда хочется напрямую получить доступ к буферу обмена. И как вы видите ниже, это не так уж и просто, что на Linux, что на macOS.

# Linux echo «Hello my friend!» | xclip # копировать «Hello my friend!» в буфер обмена xclip -o >> pasted_ # вставить содержимое буфера в текст файла # macOS echo «Hello my friend!» | pbcopy # копировать «Hello my friend!» в буфер обмена pbpaste >> pasted_ # вставить содержимое буфера в текст файла

Захват выхода замазки (опционально)

Если ваш bash-скрипт не прост (он может генерировать вывод с информацией об ошибках, информацией и т. Д.), Вы можете сохранить контент для анализа, когда выполнение скрипта будет закрыто.

Так как putty обычно закрывает консоль, если нет оператора, который приостанавливает ее, когда выполняется последняя строка вашего скрипта, и нет способа перенаправить вывод (но достижимо с помощью утилиты plink), нам нужно указать эту задачу в приложении PuTTY.

1) Откройте замазку, нажмите на верхнюю иконку и выберите изменить настройки.

2) Нажмите на элемент ведения журнала в правом списке. Теперь выберите опцию All output output в области входа в сеанс.

Наконец, выберите путь к файлу в вашей системе и нажмите «Применить».

Весь вывод, сгенерированный замазкой, будет записан в этот файл журнала.

Вызов команд из истории

В моем случае это снова запустил ls -lrt, как вы можете видеть из вывода моей истории, это было на шесть команд выше моей последней команды.

Вы также можете использовать «!» как своего рода поиск. Используя мой пример истории bash, скажем, я хотел запустить последний цикл for, который был запущен. Вы можете использовать «! -14», но трудно вспомнить, сколько команд было назад, по крайней мере, для меня. Вместо этого мы можем сказать bash просто выполнить последнюю команду, начинающуюся с «for», вот так:

Пример:

[email protected]:~$ !for for i in `cat names`; do echo -n «FORWARD: $i — REVERSE: «; dig +short $i; done

Вы также можете указать по номеру, какую команду вы хотите запустить. Например, я хотел запустить команду 18 в приведенном выше примере. Используя восклицательный знак, сделать это можно так:

Например:

[email protected]:~$ !18 freshclam

Отладка

Проверка синтаксиса (экономит время если скрипт выполняется дольше 15 секунд):

bash -n

Трассировка:

bash -v

Трассировка с раскрытием сложных команд:

bash -x

Параметры -v и -x можно задать в коде, это может быть полезно если ваш скрипт работает на одной машине а журналирование ведется на другой:

set -o verbose set -o xtrace

Признаки того, что вы не должны использовать shell скрипты:

  • Ваш скрипт содержит более нескольких сотен строк.
  • Вам нужны структуры данных сложнее обычных массивов.
  • Вас задолбало заниматься непотребствами с кавычками и экранированием.
  • Вам необходимо обрабатывать/изменять много строковых переменных.
  • У вас нет необходимости вызывать сторонние програмы и нет необходимости в пайпах.
  • Для вас важна скорость/производительность.

Если ваш проект соответствует пунктам из этого списка, рассмотрите для него языки языки Python или Ruby. Ссылки: Advanced Bash-Scripting Guide:  Bash Reference Manual:  Оригинал статьи: 

Читайте также:  Midnight Commander: установка и настройка в Linux