我跟着this提问,但我似乎无法解决这个问题。
(为了测试)我有一个带有2个脚本的powershell模块:variables.ps1和function.ps1以及一个清单mymodule.psd1(这些文件都在同一个目录中)
这是variables.ps1的内容:
$a = 1;
$b = 2;
这是function.ps1的内容
. .\variables.ps1
function myfunction
{
write-host $a
write-host $b
}
导入模块并调用myfunction时。这是输出:
C:\> Import-Module .\mymodule.psd1
C:\> myfunction
. : The term '.\variables.ps1' is not recognized as the name of a cmdlet, function, script file, or operable
program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At C:\Users\Jake\mymodule\function.ps.ps1:8 char:4
+ . .\variables.ps1
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (.\variables.ps1:String) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : CommandNotFoundException
为什么这不起作用?
答案 0 :(得分:14)
在脚本中使用相对路径时,它们与调用者$PWD
相关 - 您当前所在的目录。
要使其相对于当前脚本在文件系统上的目录,您可以使用自动变量$PSScriptRoot
. (Join-Path $PSScriptRoot variables.ps1)
PowerShell 3.0版中引入了$PSScriptRoot
变量,对于PowerShell 2.0,您可以使用以下函数进行模拟:
if(-not (Get-Variable -Name 'PSScriptRoot' -Scope 'Script')) {
$Script:PSScriptRoot = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
}
. (Join-Path $PSScriptRoot variables.ps1)