Как запустить программу из скрипта

Содержание

Описывает, как выполнять и писать скрипты в PowerShell.

Подробное описание

Скрипт — это обычный текстовый файл, содержащий одну или несколько команд PowerShell. Скрипты PowerShell имеют .ps1 расширение файла.

Выполнение скрипта во многом похоже на выполнение командлета. Вы вводите путь и имя файла скрипта и используете параметры для отправки данных и задания параметров. Скрипты можно запускать на компьютере или в удаленном сеансе на другом компьютере.

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

Скрипты обладают дополнительными функциями, такими как специальные #Requires комментарии, использование параметров, поддержка разделов данных и цифровое подписывание для обеспечения безопасности. Вы также можете написать разделы справки для сценариев и для любых функций в скрипте.

Как создавать скрипты в Windows | удобный конструктор с графическим интерфейсом

Запуск скрипта

Перед запуском скрипта в Windows необходимо изменить политику выполнения PowerShell по умолчанию. Политика выполнения не применяется к PowerShell, работающей на платформах, отличных от Windows.

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

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

Чтобы изменить политику выполнения, используйте следующую процедуру.

В командной строке введите:

Set-ExecutionPolicy AllSigned
Set-ExecutionPolicy RemoteSigned

Изменение вступает в силу немедленно.

Чтобы запустить скрипт, введите полное имя и полный путь к файлу скрипта.

Например, чтобы запустить скрипт Get-ServiceLog.ps1 в каталоге C:Scripts, введите следующее:

C:ScriptsGet-ServiceLog.ps1

Чтобы запустить скрипт в текущем каталоге, введите путь к текущему каталогу или используйте точку для представления текущего каталога, а затем путь обратной косой черты ( . ).

Например, чтобы запустить скрипт ServicesLog.ps1 в локальном каталоге, введите:

.Get-ServiceLog.ps1

Если скрипт содержит параметры, введите параметры и значения параметров после имени файла скрипта.

Например, следующая команда использует параметр ServiceName скрипта Get-ServiceLog для запроса журнала действий службы WinRM.

.Get-ServiceLog.ps1 -ServiceName WinRM

В качестве функции безопасности PowerShell не выполняет скрипты при двойном щелчке значка скрипта в проводник или при вводе имени скрипта без полного пути, даже если скрипт находится в текущем каталоге. Дополнительные сведения о выполнении команд и скриптов в PowerShell см. в разделе about_Command_Precedence.

Запуск с помощью PowerShell

Начиная с PowerShell 3.0, скрипты можно запускать из проводник.

Python в .EXE ► КАК?

Чтобы использовать функцию «Запуск с помощью PowerShell», выполните следующие действия.

Запустите проводник, щелкните правой кнопкой мыши имя файла скрипта и выберите «Выполнить с помощью PowerShell».

Функция «Запуск с помощью PowerShell» предназначена для выполнения скриптов, которые не имеют необходимых параметров и не возвращают выходные данные в командную строку.

Дополнительные сведения см. в разделе about_Run_With_PowerShell.

Выполнение скриптов на других компьютерах

Чтобы запустить скрипт на одном или нескольких удаленных компьютерах, используйте параметр FilePath командлета Invoke-Command .

Введите путь и имя файла скрипта в качестве значения параметра FilePath . Скрипт должен находиться на локальном компьютере или в каталоге, к которому локальный компьютер может получить доступ.

Следующая команда выполняет Get-ServiceLog.ps1 скрипт на удаленных компьютерах с именами Server01 и Server02.

Invoke-Command -ComputerName Server01,Server02 -FilePath ` C:ScriptsGet-ServiceLog.ps1

Получение справки по сценариям

Командлет Get-Help получает разделы справки для сценариев, а также командлетов и других типов команд. Чтобы получить раздел справки для скрипта, введите Get-Help путь и имя файла скрипта. Если путь к скрипту находится в Path переменной среды, его можно опустить.

Читайте также:
Как создать установщик программы ехе

Например, чтобы получить справку по скрипту ServicesLog.ps1, введите следующее:

get-help C:adminscriptsServicesLog.ps1

Написание скрипта

Скрипт может содержать любые допустимые команды PowerShell, включая отдельные команды, команды, использующие конвейер, функции и структуры управления, такие как операторы If и циклы For.

Чтобы написать скрипт, откройте новый файл в текстовом редакторе, введите команды и сохраните их в файле с допустимым именем файла с расширением .ps1 .

В следующем примере показан простой скрипт, который получает службы, работающие в текущей системе, и сохраняет их в файл журнала. Имя файла журнала создается на основе текущей даты.

$date = (get-date).dayofyear get-service | out-file «$date.log»

Чтобы создать этот скрипт, откройте текстовый редактор или редактор скриптов, введите эти команды и сохраните их в файле с именем ServiceLog.ps1 .

Параметры в скриптах

Чтобы определить параметры в скрипте, используйте оператор Param. Оператор Param должен быть первым оператором в скрипте, за исключением комментариев и любых #Require операторов.

Параметры скрипта работают аналогично параметрам функции. Значения параметров доступны для всех команд в скрипте. Все функции параметров функции, включая атрибут Parameter и его именованные аргументы, также допустимы в скриптах.

При выполнении скрипта пользователи скрипта введите параметры после имени скрипта.

В следующем примере показан Test-Remote.ps1 скрипт с параметром ComputerName . Обе функции скрипта могут обращаться к значению параметра ComputerName .

param ($ComputerName = $(throw «ComputerName parameter is required.»)) function CanPing < $error.clear() $tmp = test-connection $computername -erroraction SilentlyContinue if (!$?) else > function CanRemote < $s = new-pssession $computername -erroraction SilentlyContinue if ($s -is [System.Management.Automation.Runspaces.PSSession]) else > if (CanPing $computername)

Чтобы запустить этот скрипт, введите имя параметра после имени скрипта. Пример:

C:PS> .test-remote.ps1 -computername Server01 Ping succeeded: Server01 Remote test failed: Server01

Дополнительные сведения об инструкции Param и параметрах функции см. в разделе about_Functions и about_Functions_Advanced_Parameters.

Написание справки для сценариев

Вы можете написать раздел справки для скрипта с помощью любого из следующих методов:

  • Справка по Comment-Based для сценариев Создайте раздел справки, используя специальные ключевые слова в комментариях. Чтобы создать справку на основе комментариев для скрипта, примечания должны быть размещены в начале или конце файла скрипта. Дополнительные сведения о справке на основе комментариев см. в разделе about_Comment_Based_Help.
  • Справка по XML-Based для сценариев Создайте раздел справки на основе XML, например тип, который обычно создается для командлетов. При переводе разделов справки на несколько языков требуется справка на основе XML.

Чтобы связать скрипт с разделом справки на основе XML, используйте . Ключевое слово комментария к справке ExternalHelp. Дополнительные сведения о ключевом слове ExternalHelp см. в разделе about_Comment_Based_Help. Дополнительные сведения о справке на основе XML см. в разделе How to Write Cmdlet Help.

Возврат значения выхода

По умолчанию скрипты не возвращают состояние выхода по завершении скрипта. Для возврата кода выхода из скрипта exit необходимо использовать оператор . По умолчанию exit инструкция возвращает . 0 Можно указать числовое значение для возврата другого состояния выхода. Ненулевой код выхода обычно сигнализирует о сбое.

В Windows допускается любое число между [int]::MinValue и [int]::MaxValue .

В Unix допустимы только положительные числа в диапазоне от [byte]::MinValue (0) до [byte]::MaxValue (255). Отрицательное число в диапазоне -1 от до -255 автоматически преобразуется в положительное число путем добавления 256. Например, -2 преобразуется в 254 .

В PowerShell exit инструкция задает значение переменной $LASTEXITCODE . В командной оболочке Windows (cmd.exe) оператор exit задает значение переменной %ERRORLEVEL% среды.

Любой аргумент, который не является числовым или выходит за пределы диапазона платформы, преобразуется в значение 0 .

Определение области скрипта и источников точек

Каждый скрипт выполняется в собственной области. Функции, переменные, псевдонимы и диски, созданные в скрипте, существуют только в области скрипта. Вы не можете получить доступ к этим элементам или их значениям в области, в которой выполняется скрипт.

Чтобы запустить скрипт в другой области, можно указать область, например Глобальная или Локальная, или можно указать точку в источнике скрипта.

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

Чтобы установить точку в источнике скрипта, введите точку (.) и пробел перед путем к скрипту.

. C:scriptsUtilityFunctions.ps1

или диспетчер конфигурации служб

. .UtilityFunctions.ps1

После выполнения скрипта UtilityFunctions.ps1 функции и переменные, создаваемые скриптом, добавляются в текущую область.

Читайте также:
Какой цвет по умолчанию имеют точки привязанные к объекту в программе геогебра

Например, UtilityFunctions.ps1 скрипт создает функцию New-Profile и переменную $ProfileName .

#In UtilityFunctions.ps1 function New-Profile < Write-Host «Running New-Profile function» $profileName = split-path $profile -leaf if (test-path $profile) else >

При запуске скрипта UtilityFunctions.ps1 в собственной области скрипта New-Profile функция и $ProfileName переменная существуют только во время выполнения скрипта. Когда скрипт завершает работу, функция и переменная удаляются, как показано в следующем примере.

C:PS> .UtilityFunctions.ps1 C:PS> New-Profile The term ‘new-profile’ is not recognized as a cmdlet, function, operable program, or script file. Verify the term and try again. At line:1 char:12 + new-profile $profileName C:PS>

Когда вы создаете и запускаете скрипт с точкой, он создает функцию New-Profile и $ProfileName переменную в сеансе в области. После выполнения скрипта можно использовать функцию New-Profile в сеансе, как показано в следующем примере.

C:PS> . .UtilityFunctions.ps1 C:PS> New-Profile Directory: C:UsersjunebDocumentsWindowsPowerShell Mode LastWriteTime Length Name —- ————- —— —- -a— 1/14/2009 3:08 PM 0 Microsoft.PowerShellISE_profile.ps1 C:PS> $profileName Microsoft.PowerShellISE_profile.ps1

Дополнительные сведения об области см. в разделе about_Scopes.

Скрипты в модулях

Модуль — это набор связанных ресурсов PowerShell, которые можно распределить как единое целое. Модули можно использовать для упорядочения скриптов, функций и других ресурсов. Модули также можно использовать для распространения кода среди других пользователей и получения кода из надежных источников.

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

Дополнительные сведения о модулях см. в разделе about_Modules.

Другие функции скриптов

PowerShell имеет множество полезных функций, которые можно использовать в скриптах.

  • #Requires — С помощью инструкции #Requires можно предотвратить выполнение скрипта без указанных модулей или оснастки и указанной версии PowerShell. Дополнительные сведения см. в разделе about_Requires.
  • $PSCommandPath — содержит полный путь и имя выполняемого скрипта. Этот параметр допустим во всех сценариях. Эта автоматическая переменная появилась в PowerShell 3.0.
  • $PSScriptRoot — содержит каталог, из которого выполняется скрипт. В PowerShell 2.0 эта переменная допустима только в модулях скриптов ( .psm1 ). Начиная с PowerShell 3.0, он действителен во всех сценариях.
  • $MyInvocation — автоматическая $MyInvocation переменная содержит сведения о текущем скрипте, включая сведения о том, как он был запущен или вызван. Эту переменную и ее свойства можно использовать для получения сведений о скрипте во время его выполнения. Например, . $MyInvocation Переменная MyCommand.Path содержит путь и имя файла скрипта. $MyInvocation . Строка содержит команду, которая запустила скрипт, включая все параметры и значения. Начиная с PowerShell 3.0, имеет два новых свойства, $MyInvocation которые предоставляют сведения о скрипте, который вызвал или вызвал текущий скрипт. Значения этих свойств заполняются только в том случае, если вызывающий объект является скриптом.
  • PSCommandPath содержит полный путь и имя скрипта, который вызвал или вызвал текущий скрипт.
  • PSScriptRoot содержит каталог скрипта, который вызвал или вызвал текущий скрипт.

$PSCommandPath В отличие от автоматических переменных и $PSScriptRoot , которые содержат сведения о текущем скрипте, свойства PSCommandPath и PSScriptRoot переменной $MyInvocation содержат сведения о скрипте, который вызвал текущий скрипт.

См. также раздел

  • about_Command_Precedence
  • about_Comment_Based_Help
  • about_Execution_Policies
  • about_Functions
  • about_Modules
  • about_Profiles
  • about_Requires
  • about_Run_With_PowerShell
  • about_Scopes
  • about_Script_Blocks
  • about_Signing
  • Invoke-Command

Источник: learn.microsoft.com

Вызов скрипта из текущего скрипта в Bash

Иногда нам нужно запустить внешний скрипт из текущего запущенного скрипта. Bash позволяет нам запускать внешний скрипт из другого скрипта путем вызова. В этой статье мы рассмотрим, как можно вызвать внешний сценарий Bash из текущего запущенного сценария. Также мы рассмотрим некоторые примеры и пояснения, чтобы облегчить изучение темы.

Существует три простых способа вызова внешнего скрипта: команда source, символ . и команда sh. Вы можете выбрать любой из этих методов.

linux

Создание сценария Bash

Прежде чем начать, предположим, что мы создали наш первый Bash-скрипт под названием ScriptOne.sh с приведенным ниже кодом:

echo ‘Это первый сценарий Bash, который ожидает ответа’.

Нам нужно разработать другой сценарий Bash, который будет ссылаться на наш первый сценарий Bash. Мы можем вызвать первый сценарий из другого сценария Bash тремя способами, описанными ниже.

Использование команды source для вызова другого сценария из текущего сценария в Bash

В нашем первом методе мы будем использовать команду source. Это специальная команда, которая может быть использована для выполнения другого сценария.

Используя эту команду, код для нашего примера будет выглядеть следующим образом:

echo ‘Это второй файл, который вызовет другой скрипт’. source first.sh

Читайте также:
Программа позволяющее настроить внешнее устройство принтер сканер и т д

Обратите внимание, что после команды source должен стоять пробел.

Использование символа . для вызова другого сценария из текущего сценария в Bash

Это самый простой метод. В этом методе мы будем использовать символ .

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

echo ‘Это второй файл, который вызовет другой скрипт’ . first.sh

Обратите внимание, что после символа . должен стоять пробел.

Использование команды sh для вызова другого сценария из текущего сценария в Bash

В нашем последнем примере мы будем использовать команду sh, встроенную команду Bash, которую можно использовать для выполнения внешних скриптов. Код для того же примера с использованием команды sh будет выглядеть следующим образом:

echo ‘Это второй файл, который вызовет другой скрипт’. sh first.sh

Обратите внимание, что после команды sh должен стоять пробел.

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

Это второй файл, который вызовет другой скрипт Это первый bash-скрипт, который ожидает ответа

Источник: g-soft.info

unixforum.org

Нужно : запустить несколько приложений из shell скрипта. В конце скрипта мне нужно убить приложения, т.е. нужно сохранить их pid. Кроме того запуск с serv_id=$!

Мне не подходит, по выше описанной причине.

Кроме того при этом для каждого запущенного приложение нужно указать начальный каталог запуска. Т.е server будет считать что он запущен из каталога где я скрипт запустил, а мне нужно насильно ему сказать что он запущен из другого каталога, иначе он не сможет найти свои каталоги с конфигами. Как это сделать ?

Спасибо сказали:
tmp13 Сообщения: 986 ОС: openSuse 11.2

Re: Запуск приложений в shell скрипте

Сообщение tmp13 » 30.01.2008 19:55

/home/klmn/klmn
klmn собственно приложение
потомесли нужен пид
ps -ef|grep klmn|awk
например так=)
или я чёт не понял?)
ну если точнее

#!/bin/bash /home/klmn/klmn pid=`ps -ef|grep klmn|awk ` kill -15 $pid exit

а и ещё не знаю как на счёт нового сеанса но тут насколько я знаю просто открывается ещё один bash shell=)

Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!

Спасибо сказали:
AoN Сообщения: 14

Re: Запуск приложений в shell скрипте

Сообщение AoN » 30.01.2008 23:14

1) В основном скрипте запускать отдельно для каждого приложения свой скрипт
2) а в них:
cd /нужная/директория
echo $$ > /var/тырыпыры/дляПриложения_N1.pid
exec приложение_N1
3) затем когда убивать надо будет
for i in /var/тырыпыры/*;do kill $(cat $i); done

Спасибо сказали:
netguard Сообщения: 30

Re: Запуск приложений в shell скрипте

Сообщение netguard » 31.01.2008 12:41

Спасибо, понял.
Спасибо сказали:
sash-kan Администратор Сообщения: 13939 Статус: oel ngati kameie ОС: GNU Контактная информация:

Re: Запуск приложений в shell скрипте

Сообщение sash-kan » 02.02.2008 00:15

$ (cd /tmp; vi) vi )

как видим, 7919, выведенные командой echo, и есть pid sub-shell-а, внутри которого запущен vi.
pid, считанный из $!, естественно, надо сохранить в какой-нибудь переменой. для последующего использования.

Спасибо сказали:
netguard Сообщения: 30

Re: Запуск приложений в shell скрипте

Сообщение netguard » 04.02.2008 14:43

Еще один вопрос появился по поводу запуска, но уже удаленного.

Возможно ли это ?

Спасибо сказали:
netguard Сообщения: 30

Re: Запуск приложений в shell скрипте

Сообщение netguard » 04.02.2008 15:56

Еще такая проблема появилась, с перенаправлением ввода/вывода.

kill_app() < if test $app_id -ne 0 then kill $app_id 2>/dev/null fi > . $application > /dev/null /dev/null (wd: ~/Shell/Test/APP)

Не понимаю откуда это выползает . мне нужно чтобы никаких надписей подобных не было. Я думал что 2> при kill поможет, однако эта строка все равно появляется .
на строке 53 я выполняю сравнение с помощью test.

Спасибо сказали:
DjSpike Сообщения: 2265 Статус: в поисках истины ОС: Lubuntu 12.04

Re: Запуск приложений в shell скрипте

Сообщение DjSpike » 04.02.2008 23:52

У меня тоже вопрос немного по теме. Как сделать чтобы после запуска программы дальше выполнялся скрипт, т.е. программа как бы запускалась в фоне.
Вот скрипт:

#!/bin/bash tcrecv_BIN=»/root/tc-recv» tcrecv_CONF=»/root/tc-recv/recv.ini» cd $DIR/bin case «$1» in start) echo «Run Tc-recv» szap -c/etc/channels.conf -a1 -n5 2>/dev/null cd $tcrecv_BIN ./tc-recv $tcrecv_CONF 2>Ss» echo «All done» ;; stop) killall -9 tc-recv echo «Telinet kill, inet down.» ;; restart) $0 stop $0 start ;; *) echo «Usage: `basename $0` start | stop | restart» ;; esac

после выполнения этой строчки:

./tc-recv $tcrecv_CONF 2>https://unixforum.org/viewtopic.php?t=60043″ target=»_blank»]unixforum.org[/mask_link]

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru