我想在文件functions.ps1中定义函数,然后从另一个脚本调用它。像这样:
Functions.ps1:
Function Hi()
{
"hi"
}
从另一个脚本(Call.ps1)调用它。
Call.ps1:
invoke-expression -Command .\functions.ps1
Hi
但是函数是在脚本函数的本地范围内定义的。我得到错误:
The term 'hi' is not recognized as the name of a cmdlet, function,
script file , or operable program. Check the spelling of the name, or
if a path was included, v erify that the path is correct and try
again.
有没有一种简单的方法可以解决这个问题?
答案 0 :(得分:5)
您必须 dotsource 您的脚本才能将其加载到当前的运行空间中:
. .\functions.ps1
Hi
答案 1 :(得分:0)
我认为这样做的方法是在应该使用该函数的脚本中使用该文件。
所以在将使用该函数的脚本中放置这样的东西。
。 \ functions.ps1 然后你可以开始在该文件中调用函数。
有点记忆,但认为它会起作用。
编辑:删除了一个脑胎.. :)
答案 2 :(得分:0)
是的,dotsource是你正在寻找的东西。 如果你的脚本包含空格,你可以像这样点源它
."C:\Dotsourced script.ps1"
没有空间,就像其他人说的那样
.C:\function1.ps1
dotourced脚本中包含的所有函数和逻辑将在获取时加载。因此,请尽量使脚本保持在函数中的点源,否则它将在源代码时运行。
在SS64上阅读更多相关信息,例如: https://ss64.com/ps/source.html