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

$MyInvocation.MyCommand的.Source与.Path属性何时存在差异?

关于$MyInvocation.MyCommand中Source和Path属性的差异说明

这不是巧合,ExternalScriptInfo(对应脚本文件的命令对象)里的Source和Path属性取值一致是设计逻辑导致的,但在其他类型的命令对象中,二者会有明显区别:

1. 脚本文件(ExternalScriptInfo)场景

脚本的“源”就是它的物理文件路径,所以官方文档里对Source(获取命令的源)和Path(获取脚本文件路径)的描述,本质指向的是同一个内容。实际测试中,无论你直接运行脚本还是通过其他方式调用,这两个属性的输出都是脚本的完整绝对路径。

示例验证:

# 在test.ps1中写入以下代码
Write-Host "Source: $($MyInvocation.MyCommand.Source)"
Write-Host "Path: $($MyInvocation.MyCommand.Path)"

运行后输出的两行内容完全一致。

2. 其他命令类型的差异情况

只有脚本文件的命令对象会出现二者一致的情况,其他类型的命令对象中,Source和Path的取值有明显区别:

  • 函数(FunctionInfo):Source会返回函数定义所在的脚本文件路径(如果函数是在脚本里定义的),但Path属性始终为空,因为函数不是独立的文件实体。
  • Cmdlet(CmdletInfo):Source返回包含该Cmdlet的.NET程序集路径,Path属性为空,因为Cmdlet是编译后的代码,没有对应的脚本文件路径。
  • 脚本块(ScriptBlockInfo):如果脚本块来自某个脚本文件,Source会返回该脚本的路径,而Path属性同样为空。

总结

Source和Path在脚本文件场景下的一致性是设计逻辑导致的——脚本的“源”就是它的文件路径;而在非脚本文件的命令类型中,二者的取值会根据命令的本质产生差异,这才是两个属性设计的核心区别。

内容的提问来源于stack exchange,提问作者Hashbrown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:52:07