6

我试图找出一种方法来获取定义PowerShell函数的文件路径(例如Test1或Test2),而不是调用者的路径,这可以通过$PSScriptRoot自动变量轻松获得。

考虑以下文件夹结构:

c:\Scripts\Test.ps1
c:\Scripts\Test1\Test1.ps1
c:\Scripts\Test2\Test2.ps1

测试.ps1

Set-Location $PSScriptRoot;
. .\Test1\Test1.ps1;
. .\Test2\Test2.ps1;

Test1;
Test2;

测试1.ps1

function Test1 {
    [CmdletBinding()]
    param (
    )
    Write-Host -Object "Entering Test1";
    Write-Host -Object "Exiting Test1";
}

测试2.ps1

function Test2 {
    [CmdletBinding()]
    param (
    )
    Write-Host -Object "Test2";
    Write-Host -Object "Exiting Test2";
}

我尝试在$PSCmdlet$MyInvocation自动变量上使用各种属性,但似乎无法找到一种方法来获取定义函数的文件的路径,而不是调用者所在的位置。

以不同的方式问,我如何C:\Scripts\Test1\Test1.ps1Test1函数内部获取路径,当它被调用时Test.ps1Test2.ps1脚本和Test2函数也是如此。我如何C:\Scripts\Test2\Test2.ps1Test2函数内部获取路径?

这是不可能的,因为我正在使用.呼叫操作员将函数导入当前会话吗?

4

2 回答 2

15

这是另一种方法,使用函数的 scriptblock File 属性获取包含该函数的文件:

${function:Test1}.File
于 2013-04-15T06:32:08.943 回答
7

我认为 $PSCommandPath 有你正在寻找的东西。

于 2013-04-15T02:19:21.403 回答