我试图找到一种方法来获取PowerShell 函数的文件路径(例如Test1或Test2),而不是调用者的路径,后者可以通过$PSScriptRoot
自动变量轻松获得。
考虑以下文件夹结构:
c:\Scripts\Test.ps1
c:\Scripts\Test1\Test1.ps1
c:\Scripts\Test2\Test2.ps1
Test.ps1
Set-Location $PSScriptRoot;
. .\Test1\Test1.ps1;
. .\Test2\Test2.ps1;
Test1;
Test2;
Test1.ps1
function Test1 {
[CmdletBinding()]
param (
)
Write-Host -Object "Entering Test1";
Write-Host -Object "Exiting Test1";
}
Test2.ps1
function Test2 {
[CmdletBinding()]
param (
)
Write-Host -Object "Test2";
Write-Host -Object "Exiting Test2";
}
我尝试使用
$PSCmdlet
和$MyInvocation
自动变量的各种属性,但似乎找不到一种方法来获取函数定义所在文件的路径,而非调用者所在路径。
换句话说,当从Test.ps1
调用Test1
函数时,我如何从函数内部获取路径C:\Scripts\Test1\Test1.ps1
?对于Test2.ps1
脚本和Test2
函数也是同样的问题。当从函数Test2
内部获取路径C:\Scripts\Test2\Test2.ps1
时,我该怎么做?这是否因为我使用了
.
调用运算符将函数导入到当前会话中而无法实现?