Как вызвать функцию из одного скрипта в другом скрипте? - PullRequest
0 голосов
/ 07 октября 2019

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

В Integration.ps1 у меня есть

. .\AddStart.ps1
Start -job $job

В AddStart.ps1 у меня есть

function main()
{

Write-Host "This is Main"
Start($job)
}
function Start($job)
{

Write-Host "This is start $job"
}
Main

Всякий раз, когда я запускаю интеграцию в Powershell, она выводит Это также Main.

Я просто хочу передать переменную $ job в Start, не заходя в главную.

Ответы [ 4 ]

0 голосов
/ 08 октября 2019

Это было из-за функции Main в конце модуля. Я удалил его и вызвал функцию из PowerShell, и она заработала. Спасибо за ответы.

0 голосов
/ 07 октября 2019

Является ли ваш пользовательский модуль в ваших каталогах $ env: ModulePath или в дочернем каталоге вашего каталога сценариев

Основной сценарий

Import-Module -Name .\ModuleTest
Test

Модуль Сценарий в каталоге с именем ModuleTest ифайл с именем ModuleTest.psm1

Function Test { Write-Information -MessageData "My Test" -InformationAction Continue }

Кроме того, вы выполняете точечный поиск исходного сценария. А Start - это псевдоним Start-Job. Псевдоним выполняется первым перед выполнением функций, так что это проблема. Проверьте это: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_command_precedence?view=powershell-6

0 голосов
/ 07 октября 2019

Ваш код явно выполняет функцию Main в последней строке файла. Вы можете сделать что-то вроде этого в AddStart.ps1 ...

Param([switch] $DontExecuteMainFunction);

function main()
{
    Write-Host "This is Main"
    Start($job)
}

function Start($job)
{

    Write-Host "This is start $job"
}

if(-not $DontExecuteMainFunction){
    Main
}

Затем в точечном источнике Integration.ps1 файл будет выглядеть так:

. .\AddStart.ps1 -DontExecuteMainFunction
Start($job)

Если вы исключите -DontExecuteMainFunction (например, существующий код) возвращается к своему текущему поведению.

0 голосов
/ 07 октября 2019

Вы пытались сохранить .ps1 как .psm1, затем импортировать этот модуль и затем запустить пользовательскую функцию?

...