You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 01:17:34