如何检测PowerShell代码是否从当前文件直接调用?
PowerShell脚本仅直接调用时运行单元测试的实现方法
要实现PS1文件仅在直接调用时运行单元测试、点源加载时不执行测试的需求,可以借助PowerShell内置的$MyInvocation变量来区分执行场景。
核心判断逻辑
直接运行脚本时,PowerShell会自动用调用运算符&执行它,此时$MyInvocation.InvocationName的值为&;而用点源(. .\脚本名.ps1)加载文件时,该变量的值为.。通过判断这个值是否不等于.,就能精准区分两种执行方式。
完整代码示例
function MyFunction { param ($p1, $p2) } # Unit test if ($MyInvocation.InvocationName -ne '.') { MyFUnction 1 2 }
更严谨的替代方案
如果需要应对嵌套调用等复杂场景,可以通过对比脚本路径来判断:直接调用时,$MyInvocation.MyCommand.Path和$PSCommandPath的值完全一致;点源加载时则不同。对应的判断代码如下:
if ($MyInvocation.MyCommand.Path -eq $PSCommandPath) { MyFUnction 1 2 }
内容的提问来源于stack exchange,提问作者zdenko.s
相关产品推荐
相关产品推荐

