【发布时间】:2019-08-26 10:20:17
【问题描述】:
我正在尝试创建一个 PowerShell 模块,该模块将使用以下代码对子文件夹 "\Functions" 中找到的任何函数进行点源:
# Get the path to the function files
$functionPath = $PSScriptRoot + "\Functions\"
# Get a list of all the function filenames
$functionList = Get-ChildItem -Path $functionPath -Include *.ps1 -Name
# Loop through all discovered files and dot-source them into memory
ForEach ( $function in $functionList ) {
. ( $functionPath + $function )
}
如果我将所有函数直接放在“\Functions”文件夹中,这将正常工作。但是,这并不理想,因为我认为它不允许在以后适当管理函数文件(尤其是在多个系统管理员可以在任何给定时间修改每个函数的脚本文件的团队环境中 em>)。此外,一些函数从 CSV 或文本文件中获取输入,将这些资产和相应的函数包含在同一个文件夹中会更加整洁。
因此我的问题是:我如何完成我在上面尝试做的事情(即,点源在 "\Functions" 中找到的所有函数$PSScriptRoot 的子文件夹,即使它们位于子文件夹中?
PS. 最终目标是拥有一个通用模块,我将其分发到我的所有管理员工作站,这将使我们创建的所有与管理员相关的脚本/功能可用。然后当我们添加和删除脚本时,它们会在每次启动 PowerShell 时在模块中动态更新。
感谢 Bryan Cafferky 在此 YouTube Video 中获得灵感
【问题讨论】:
-
为什么需要点源?如果您希望所有这些功能无论如何都可用,为什么不将它们添加到顶级模块或它们自己的模块中,并且(假设它们已正确“安装”)它们将自动提供给 powerShell 中的用户使用?
-
因为我不想管理多个模块。此外,如果我将所有功能放在一个模块中,我会增加可能文件损坏的风险,或者如果有人签出文件并犯了错误,我会增加可能的文件损坏 - 整个模块会损坏。这样,我隔离了每个功能及其管理。
标签: windows powershell dot-source