我正在编写一个集成测试,并试图从测试中使用的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而不用进入主要变量。
答案 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,然后导入该模块,然后运行自定义功能?