【发布时间】:2020-02-05 13:41:14
【问题描述】:
我正在寻找一种方法来获取主(比如说“入口点”)PowerShell 脚本 (*.ps1) 文件的路径。
让我们以下面的例子为例:
- 我有以下文件:
“C:\MyDir1\Main.ps1”调用中的函数
"C:\MyDir2\SubDir1\MyModule.psm1" 中调用函数
“C:\AnotherDir\AnotherScript.ps1”
- 我运行以下 PowerShell 命令:
"PowerShell.exe -File "C:\MyDir1\Main.ps1"
- 我想要什么:从脚本“AnotherScript.ps1”中,我想找到“C:\MyDir1\Main.ps1”的路径。
注意 1: 请注意,我不是在谈论可通过 $PSScriptRoot 变量获得的当前脚本的路径。
注意 2: 看来变量 $global:PSScriptRoot(与 $PSScriptRoot 不同) 是我正在寻找的,但不幸的是,当从 PowerShell 会话调用主脚本时,此值为空。
【问题讨论】:
-
你可以试试
@(Get-PSCallStack)[1].ScriptName或@(Get-PSCallStack)[1].Location -
我已经通过 Get-PSCallStack,这是一种可能,但是我们必须根据入口点的启动方式(从 PowerShell 会话或从 powershell)获取最后一个元素或最后一个元素.exe -文件“Script.ps1”)。
-
在这种情况下,
@(Get-PSCallStack)[-1].ScriptName不可以吗? -
@(Get-PSCallStack)[-1].ScriptName 并不总是有效,因为 'ScriptName' 在从 PowerShell 提示符调用脚本时为空(如 [PS C:\ Temp>.MainScript.ps1])
标签: powershell