我正在尝试创建一个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”文件夹中,这将很好地工作。但是,这并不理想,因为我认为它不能在以后对功能文件进行适当的管理(尤其是在团队环境中,其中多个SysAdmin可以在任何给定时间修改每个功能的脚本文件)。此外,某些功能从CSV或文本文件获取输入,将那些资产和相应功能包含在同一文件夹中会更加整齐。
我的问题:我该如何完成我正在尝试做的事情(即,在 \ Functions 中找到的所有函数都以点源方式提供) $ PSScriptRoot 的子文件夹,即使它们位于子文件夹中?
PS。最终目标是拥有一个通用模块,该模块可以分发给我的所有管理工作站,该模块将使我们创建的所有与管理相关的脚本/功能可用。然后,随着我们添加和删除脚本,每次启动PowerShell时,它们都会在模块中动态更新。
在此YouTube Video中,Credit感谢Bryan Cafferky
答案 0 :(得分:1)
您可以使用单线将其简化一点:
Get-ChildItem -Path "$PSScriptRoot\Functions\" -Filter *.ps1 -Recurse | %{. $_.FullName }
您缺少了-Recurse
参数,可以使用$function.FullName
而不是将$functionPath
和$function
串联起来