如何从另一个脚本中的一个脚本调用函数?

时间:2019-10-07 14:50:21

标签: powershell integration-testing

我正在编写一个集成测试,并试图从测试中使用的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中运行集成时,它都会输出 这也是主要的。

我只想将$ job变量传递给Start而不用进入主要变量。

4 个答案:

答案 0 :(得分:0)

您的自定义模块是位于$ 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

答案 1 :(得分:0)

您的代码正在文件的最后一行上明确执行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(例如您现有的代码),它将恢复为当前行为。

答案 2 :(得分:0)

这是由于模块末尾的Main功能。我删除了它,并从PowerShell中调用了该函数,然后它起作用了。感谢您的回答。

答案 3 :(得分:-1)

您是否尝试过将.ps1保存为.psm1,然后导入该模块,然后运行自定义功能?