【发布时间】:2012-01-10 17:47:00
【问题描述】:
这应该是一个简单的任务,但我已经看到了几次尝试如何获取执行的 cmdlet 所在目录的路径,但都取得了不同程度的成功。例如,当我执行C:\temp\myscripts\mycmdlet.ps1 时,它的设置文件位于C:\temp\myscripts\settings.xml,我希望能够将C:\temp\myscripts 存储在mycmdlet.ps1 内的变量中。
这是一种可行的解决方案(虽然有点麻烦):
$invocation = (Get-Variable MyInvocation).Value
$directorypath = Split-Path $invocation.MyCommand.Path
$settingspath = $directorypath + '\settings.xml'
另一个人建议这个解决方案只适用于我们的测试环境:
$settingspath = '.\settings.xml'
我非常喜欢后一种方法,并且更喜欢它每次都必须将文件路径解析为参数,但我无法让它在我的开发环境中工作。我该怎么办?跟PowerShell的配置方式有关系吗?
【问题讨论】:
-
请注意,这个问题的模棱两可的标题导致下面的答案解决了两个不同的问题之一,但没有明确说明哪个:(a) 如何引用 current 位置(目录)或 (b)如何引用运行脚本的位置(运行脚本所在的目录,可能是也可能不是当前目录)。
标签: powershell cmdlet