如何在PowerShell中的子文件夹中添加源函数

时间:2019-04-04 15:25:45

标签: windows powershell

我正在尝试创建一个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

1 个答案:

答案 0 :(得分:1)

您可以使用单线将其简化一点:

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

您缺少了-Recurse参数,可以使用$function.FullName而不是将$functionPath$function串联起来