在另一个脚本中调用 PowerShell 函数

在另一个脚本中调用 PowerShell 函数

我有一个包含许多函数的脚本(不仅仅是函数,还有其他代码)。我想创建另一个使用主脚本中某个函数的脚本。下面是我正在尝试执行的操作的示例。在我的测试.ps1脚本:

function Test1 {Write-Host “This is test1”}
function Test2 {Write-Host “This is test2”}

Test1
Test2

在里面测试测试.ps1脚本:

. ".\test.ps1"
Test1

当我跑步时测试.ps1,输出为:

This is test1
This is test2

当我跑步时测试测试.ps1,输出为:

This is test1
This is test2
This is test1

我要做的就是在我的测试.ps1来自我的脚本测试测试.ps1剧本。我的条件之一是我们不能改变测试.ps1脚本(由于权限问题,读取与写入文件夹访问)并且我不想重复脚本代码(这就是我尝试重用代码的原因)。

我找不到我需要的解决方案,每个人都在谈论使用 PowerShell 进行点源化。那么,点源化是否是执行此操作的正确方法,或者是否有其他方法可以(仅)使用另一个 PowerShell 脚本中的函数而不运行该脚本中的其余代码?

谢谢

答案1

我找到了一种方法来做到这一点,所以我会发布它以防它对其他人有帮助。当然,我确实必须编辑原始 PS 脚本,但所做的更改可以忽略不计,它们根本不影响脚本的主要处理。

内容测试.ps1脚本:

Param ([int]$Local)

function Test1 {Write-Host “This is test1”}
function Test2 {Write-Host “This is test2”}

If ($Local -eq 1) {Exit}

Test1
Test2

内容测试测试.ps1脚本:

. ".\test.ps1" -Local 1
Test1

当我跑步时测试.ps1,我得到:

This is test1
This is test2

但是现在(做了更改),当我运行测试测试.ps1,我得到:

This is test1

这样,脚本就将 test.ps1 中的函数加载到内存中(以便可以使用它们),但它不会处理脚本剩余部分的任何部分(因为我们退出)。现在,我可以根据需要使用位于此脚本中的函数,而不会影响原始源脚本的处理。

感谢大家的反馈!

相关内容