小编典典

如何获取正在执行的 cmdlet 的当前目录

all

这应该是一个简单的任务,但我已经看到了几次尝试如何获取执行的 cmdlet
所在目录的路径,但成功率参差不齐。例如,当我执行C:\temp\myscripts\mycmdlet.ps1其中有一个设置文件时,C:\temp\myscripts\settings.xml我希望能够存储C:\temp\myscriptsmycmdlet.ps1.

这是一种可行的解决方案(虽然有点麻烦):

$invocation = (Get-Variable MyInvocation).Value
$directorypath = Split-Path $invocation.MyCommand.Path
$settingspath = $directorypath + '\settings.xml'

另一个人建议这个解决方案只适用于我们的测试环境:

$settingspath = '.\settings.xml'

我非常喜欢后一种方法,并且更喜欢它每次都必须将文件路径解析为参数,但我无法让它在我的开发环境中工作。我应该怎么办?它与PowerShell的配置方式有关吗?


阅读 105

收藏
2022-05-31

共1个答案

小编典典

执行此操作的可靠方法就像您展示的那样$MyInvocation.MyCommand.Path

使用相对路径将基于 $pwd、在 PowerShell 中、应用程序的当前目录或 .NET API 的当前工作目录。

PowerShell v3+

使用自动变量$PSScriptRoot

2022-05-31