Я хочу выполнить вызов для сценария myScript1.ps1 внутри второго сценария myScript2.ps1 внутри Powershell ISE.
Следующий код внутри MyScript2.ps1 прекрасно работает из администрирования Powershell, но не работает внутри PowerShell ISE:
#Call myScript1 from myScript2
invoke-expression -Command .\myScript1.ps1
Я получаю следующую ошибку при выполнении MyScript2.ps1 из PowerShell ISE:
Термин «. \ MyScript1.ps1» не распознается как имя командлета, функции, файла сценария или работоспособной программы. Проверьте правильность написания имени или, если путь был указан, проверьте правильность пути и повторите попытку.
источник
Текущий путь к MyScript1.ps1 отличается от myScript2.ps1. Вы можете получить путь к папке MyScript2.ps1 и объединить его с MyScript1.ps1, а затем выполнить его. Оба сценария должны находиться в одном месте.
источник
Я вызываю myScript1.ps1 из myScript2.ps1.
Предполагая, что оба сценария находятся в одном месте, сначала получите расположение сценария с помощью этой команды:
А затем добавьте имя скрипта, который вы хотите вызвать, следующим образом:
Это должно работать.
источник
& "$PSScriptRoot\myScript1.ps1"
достаточноОднострочное решение:
источник
& '.\MyScript1.ps'
если скрипт находится в том же каталоге?Это просто дополнительная информация к ответам для передачи аргумента в другой файл.
Где вы ожидаете аргумент
PrintName.ps1
Как вызвать файл
Если вы не предоставите никакого ввода, по умолчанию будет «Joe», и это будет передано в качестве аргумента в аргумент printName в файле PrintName.ps1, который, в свою очередь, выведет строку «Joe»
источник
Возможно, вы уже нашли ответ на этот вопрос, но вот что я делаю.
Я обычно помещаю эту строку в начале моих сценариев установки:
Затем я могу использовать переменную $ PSScriptRoot в качестве местоположения текущего скрипта (пути), как в примере ниже:
В вашем случае вы можете заменить
Start-process ... в соответствии с
Вызвать-выражение $ PSScriptRoot \ ScriptName.ps1
Вы можете прочитать больше об автоматических переменных $ MYINVOCATION и $ PSScriptRoot на сайте Microsoft: https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/about/about_automatic_variables
источник
Чтобы легко выполнить файл сценария в той же папке (или подпапке), что и вызывающий, вы можете использовать это:
источник
У меня была проблема с этим. Я не использовал какие-либо умные
$MyInvocation
вещи, чтобы исправить это все же. Если вы открываете ISE, щелкнув правой кнопкой мыши файл сценария и выбрав, аedit
затем откройте второй сценарий изнутри ISE, вы можете вызвать один сценарий из другого, просто используя обычный синтаксис. \ Script.ps1 . Я предполагаю, что у ISE есть понятие текущей папки, и ее открытие таким образом устанавливает текущую папку в папку, содержащую сценарии. Когда я вызываю один сценарий от другого в обычном использовании, я просто использую . \ Script.ps1 , IMO, неправильно изменять сценарий только для того, чтобы заставить его работать в ISE должным образом ...источник
У меня была похожая проблема, и я решил ее таким образом.
Мой рабочий каталог представляет собой общую папку сценариев и несколько отдельных папок сценариев в том же корне, мне нужно вызвать определенную папку сценариев (которая вызывает общий сценарий с параметром конкретной проблемы). Так что рабочий каталог такой
Solutions1 и Solutions2 вызывают PS1 в папке Scripts, загружая параметр, сохраненный в ParameterForSolution. Так что в powershell ISE я запускаю эту команду
И код внутри Solution1.PS1:
источник
Представляю свой пример на рассмотрение. Вот как я вызываю некоторый код из скрипта контроллера в инструментах, которые я делаю. Сценарии, выполняющие эту работу, также должны принимать параметры, поэтому в этом примере показано, как их передавать. Предполагается, что вызываемый скрипт находится в том же каталоге, что и скрипт контроллера (скрипт, выполняющий вызов).
Выше приведен скрипт контроллера, который принимает 3 параметра. Они определены в блоке параметров. Затем скрипт контроллера вызывает скрипт с именем Get-ZAEventLogData.ps1. Для примера, этот скрипт также принимает те же 3 параметра. Когда скрипт контроллера вызывает скрипт, который выполняет эту работу, он должен вызвать его и передать параметры. Выше показано, как я это делаю, разбрызгивая.
источник
Как вы запускаете встроенные скрипты PowerShell внутри ваших скриптов?
Как вы используете встроенные скрипты, такие как
Они запускаются вашим компьютером, автоматически проверяя путь к сценарию.
Точно так же я могу запустить свои собственные сценарии, просто поместив имя сценария в блок сценария.
Перейдите к командной строке powershell и введите
Это вернет путь к файлу, который наша командная строка PowerShell будет выполнять каждый раз, когда вы открываете приложение.
Это будет выглядеть так
Перейдите в Документы и посмотрите, есть ли у вас каталог WindowsPowerShell. Я не сделал так
Теперь мы создали сценарий, который будет запускаться каждый раз, когда мы открываем приложение PowerShell.
Причина, по которой мы это сделали, заключалась в том, что мы могли добавить нашу собственную папку, в которой хранятся все наши пользовательские скрипты. Давайте создадим эту папку, и я назову ее «Bin» в честь каталогов, в которых Mac / Linux хранят свои скрипты.
Теперь мы хотим, чтобы этот каталог добавлялся к нашей
$env:path
переменной каждый раз, когда мы открываем приложение, поэтому вернитесь вWindowsPowerShell
каталог иЗатем добавьте это
Теперь оболочка автоматически найдет ваши команды, пока вы сохраняете скрипты в этом каталоге «Bin».
Перезапустите powershell, и он должен быть одним из первых выполняемых скриптов.
Запустите это в командной строке после перезагрузки, чтобы увидеть новый каталог в переменной пути:
Теперь мы можем вызывать наши сценарии из командной строки или из другого сценария так просто:
Как видите, мы должны вызывать их с
.ps1
расширением, пока не создадим для них псевдонимы. Если мы хотим стать модным.источник