在PowerShell中加载自定义函数

Sea*_*ong 41 powershell

我有一些额外的功能,我在另一个PowerShell脚本文件中定义,我正在尝试加载主.ps1文件.但是,当我从PowerShell提示符调用.ps1文件时,它似乎没有运行这些命令.

在以下代码示例中,build_functions.ps1具有定义各种自定义函数的代码.如果我单独运行该文件(例如,单独运行它然后运行主脚本)它可以正常工作.Build_builddefs.ps1包含许多变量,这些变量在运行主脚本之前也需要填充.

在我的主要脚本的开头,我有这个:

.\build_functions.ps1
.\build_builddefs.ps1
Run Code Online (Sandbox Code Playgroud)

但是,这些似乎没有运行,因为主脚本在尝试执行第一个自定义函数时失败.我究竟做错了什么?

man*_*lds 45

你需要dot source他们:

. .\build_funtions.ps1
. .\build_builddefs.ps1
Run Code Online (Sandbox Code Playgroud)

请注意额外的 .

heyscriptingguy条应该有所帮助- 如何重用脚本的Windows PowerShell功能


Roh*_*rth 29

我一直都在使用这个

Import-module .\build_functions.ps1 -Force
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢@manojlds的这个答案,因为点源不允许用户"撤消"点源.使用`Import-Module`,您可以通过`Remove-Module Build_Functions`轻松删除模块 (4认同)
  • 最好避免将“Import-Module”与常规“.ps1”脚本(而不是“.psm1”文件,它们是真正的模块)一起使用,因为它可能会造成概念上的混乱。实际上,“Import-module .\build_functions.ps1 -Force”与“.\build_functions.ps1 -Force”相同。.\build_functions.ps1` - 简单的点源,不涉及实际模块(除了在 `Get-Module` 输出中显示的伪模块)。因此,@FrankFu,您稍后可以_不_使用 `Remove-Module` 卸载此类定义 - 有关详细信息,请参阅[此答案](/sf/answers/5054635421/)。 (2认同)