【问题标题】:Powershell - Calling child functions from variablesPowershell - 从变量调用子函数
【发布时间】:2021-09-18 10:49:46
【问题描述】:

如何在 PowerShell 中调用函数的子集?我尝试过使用开关,但它需要传入一个开关。

如何使用脚本中的一组真或假标志来实现这一点?

提前谢谢大家!

【问题讨论】:

  • 您可以将 Boolean 值分配给变量并对其进行测试:$HotToday = $true; if ($HotToday -eq $true) {...。
  • 我想过这样做,但我有一个 if 语句列表,例如,如果我将 2 设置为 true 并将 2 设置为 false,我的 if 语句将如何处理?
  • 你想完成什么?编写构建脚本框架或类似的东西?
  • 如果不提供您已经拥有的 代码/您尝试过的内容,人们很难说出您应该对您的 代码采取什么最佳实践/最佳方法。请edit您的问题并提供最少的代码示例,以便我们为您提供帮助。

标签: function powershell variables


【解决方案1】:

不要试图将其视为“调用”(或执行“内部”)包含一组函数定义的脚本 - 翻转你的心智模型,将带有函数定义的脚本视为import 到进行调用的脚本中。

假设您编写了 3 个实用程序函数来做某事 - 现在将它们全部放在一个名为 functions.ps1 的文件中:

# functions.ps1

function taskX {
  # ...
}

function taskY {
  # ...
}

function taskZ {
  # ...
}

现在我们有了一个包含我们可能需要的功能的“工具箱”,我们可以打开它并将这些功能加载到任何其他脚本(或者如果您以交互方式使用 PowerShell 的提示)中,dot sourcing the script:

. .\functions.ps1

这将使 PowerShell 在调用范围内执行脚本 - 这基本上意味着在脚本中定义的函数和分配的变量之类的东西在脚本之后仍将保留在当前环境中执行完毕——这意味着我们现在可以调用taskX 或taskY。

所以现在,您的脚本实际上做一些事情(我们称之为驱动程序)将如下所示:

# driver.ps1
# import functions
. $PSScriptRoot\functions.ps1

# call functions with the desired parameter arguments
taskX -SomeSwitch
taskY

$PSScriptRoot 变量解析为当前执行脚本的目录,因此请确保driver.ps1 与functions.ps1 在同一目录中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 2018-04-29
    相关资源
    最近更新 更多