1

我正在尝试创建一个 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”文件夹中,这将正常工作。但是,这并不理想,因为我认为它不允许在以后正确管理函数文件(尤其是在多个系统管理员可以在任何给定时间修改每个函数的脚本文件的团队环境中)。此外,一些函数从 CSV 或文本文件中获取输入,将这些资产和相应的函数包含在同一个文件夹中会更加整洁。

因此我的问题是: 我如何完成我在上面尝试做的事情(即,点源在$PSScriptRoot的“\Functions”子文件夹中找到的所有函数,即使它们位于子文件夹中?

PS。 最终目标是拥有一个通用模块,我将其分发到我的所有管理员工作站,这将使我们创建的所有与管理员相关的脚本/功能可用。然后,当我们添加和删除脚本时,它们会在每次启动 PowerShell 时在模块中动态更新。

在这个YouTube 视频中感谢Bryan Cafferky的灵感

4

1 回答 1

3

你可以用一个单行来简化这一点:

Get-ChildItem -Path "$PSScriptRoot\Functions\" -Filter *.ps1 -Recurse | %{. $_.FullName }

您缺少-Recurse参数并且可以使用$function.FullName而不是连接$functionPath$function

于 2019-04-04T15:46:34.733 回答