PowerShell 技能连载 - 在选中的代码中运行 $PSScriptRoot
PowerShell 代码中的最大陷阱之一是自动变量 $PSScriptRoot,它始终代表当前脚本所在的文件夹的路径。但是,这要求 (a)当前脚本实际上已经保存到文件中,并且 (b)您正在执行整个文件,即通过按 F5 执行。
当您仅使用 F8 执行选中的代码时,即使您选择了整个代码,$PSScriptRoot 也为空,因此也会导致您选择的代码执行错误。
但是,在 PowerShell ISE 中,添加一些代码就能很容易地实现在选中的代码中启用 $PSScriptRoot。这是您需要运行的代码:
1 | function Invoke-Selection |
该代码向 ISE 添加了一个新命令,可以通过按 CTRL+F8 来调用该命令。现在,假设您选择了一段代码,这段代码包含了 $PSScriptRoot,您若希望运行它,只需按 CTRL+F8 而不是 F8,它将正常执行。
该快捷键调用了 Invoke-Selection 函数。此函数将接受当前选择的文本,添加缺少的自动变量 $PSScriptRoot 和 $PSCommandPath 到代码中,并根据当前脚本的当前文件路径来定义这些变量。然后执行脚本块。
这样,您现在可以调试并演示任何选中的代码,即使它包含自动变量。只需确保您将脚本保存在某个地方,以便 PowerShell 知道您的代码所在的位置。