首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >返回NULL的$MyInvocation.MyCommand.Path

返回NULL的$MyInvocation.MyCommand.Path
EN

Stack Overflow用户
提问于 2013-09-11 21:19:48
回答 2查看 58.4K关注 0票数 24

我有以下代码作为一个较长脚本的开头:

代码语言:javascript
复制
$ScriptPath = Split-Path $MyInvocation.MyCommand.Path
& $ScriptPath\build_functions.ps1
& $ScriptPath\build_builddefs.ps1

其想法是获取正在运行的脚本的路径,并使用该路径调用一些支持脚本。然而,当我单独测试它以确保它可以工作时(通过突出显示该块并只运行该代码),我得到了以下错误:

代码语言:javascript
复制
Split-Path: Cannot bind argument to parameter 'Path' because it is null.

有趣的是,当我运行整个脚本时,它似乎是单独运行这些文件。关于ISE处理选择而不是完整脚本的方式,我是否遗漏了什么?当您运行选择时,它不会建立文件系统上下文吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-11 21:23:41

$MyInvocation是在脚本运行时填充的automatic variable ,如果您在powershell console中执行$MyInvocation.MyCommand.Path或不填充ISE

这就是为什么在测试中$ScriptPath没有值($null)的原因

票数 29
EN

Stack Overflow用户

发布于 2018-08-09 01:55:26

我不知道发生在我身上的事情是不是有些地方在$MyInvocation.MyCommand.Path中寻找null,但我会解释我是如何找到解决方案的。

我有一些可以在生产环境中运行的脚本,但是当我加载.ps1文件并尝试获取$MyInvocation.MyCommand.Path时,它是空的。我的Powershell版本是4.0,但是ISE (%windir%\system32\WindowsPowerShell\v1.0\PowerShell_ISE.exe).的版本是1.0

但是我一开始并没有想到为什么它们应该工作,然而当我在PowerShell中手动检查$MyInvocation.MyCommand.Path或$MyInvocation时,为什么它是null,为什么我得到了拆分路径-parent $MyInvocation.MyCommand.Path的null错误。

所以我想我需要在我的Windows2012NUC服务器上将powershell升级到5.1,就像在我的桌面R2 PC上一样。

真正的问题是,我发现如果我在.ps1文件中设置了一个断点,并将其运行到我正在做的地方:

$ScriptDir =拆分路径-parent $MyInvocation.MyCommand.Path

它起作用了。它当然有效,我已经用了一段时间了。为什么我之前没看到呢?

哪里出了问题?我试图使用run step命令手动运行PowerShell,因为PowerShell是打开的,所以我以前从未运行过该脚本!

我不得不说这可能是一个不好的时刻。

但是我们最近遇到了一次服务器崩溃,并将其恢复(VSphere集群)并重新播种,所以我想也许我有一个旧版本的PowerShell。

PowerShell允许您在其中打开多个文件/窗口,但变量是在它们之间共享的。显然,直到您实际尝试运行脚本(而不是逐步运行)时,它才会执行脚本文件,并且无法获取路径。

我希望这篇文章能避免有人像我一样浪费时间!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18742354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档