如果发生在我身上的事情是为什么有些人在 $MyInvocation.MyCommand.Path 中寻找 null,我不知道,但我将解释我是如何找到解决方案的。
我有在生产中工作的脚本,但是当我加载 .ps1 文件并尝试获取 $MyInvocation.MyCommand.Path 时,它为空。我的 Powershell 版本是 4.0,但 ISE 是 1.0 (%windir%\system32\WindowsPowerShell\v1.0\PowerShell_ISE.exe)。
但起初我并没有想到为什么它们应该工作,但是当我在 PowerShell 中手动检查 $MyInvocation.MyCommand.Path 或 $MyInvocation 时为什么它为空,以及为什么我收到 Split-Path -parent 的空错误$MyInvocation.MyCommand.Path。
所以我想我需要在我的 Windows 2012 R2 服务器上将 powershell 升级到 5.1,就像在我的桌面 NUC PC 上一样。
真正的问题是我发现如果我在我的 .ps1 文件中设置一个断点并将其运行到我正在执行的位置:
$ScriptDir = 拆分路径-parent $MyInvocation.MyCommand.Path
它奏效了。当然它有效,我已经使用了一段时间。为什么我以前没看到?
什么地方出了错?我试图使用 run step 命令手动运行 PowerShell,但自从 PowerShell 打开以来,我之前从未运行过脚本!
我不得不说这可能是一个 No Duh 时刻。
但是我们最近发生了服务器崩溃,并对其进行了恢复(VSphere Clustered)并重新播种,所以我想也许我有一个旧版本的 PowerShell。
PowerShell 允许您在其中打开多个文件/窗口,但变量在它们之间共享。显然,直到您实际尝试运行脚本(而不是逐步运行),它没有执行脚本文件并且无法为您提供路径。
我希望这篇文章可以避免像我一样浪费大量时间!