2013-07-11 21 views
1

我有一个基于脚本的PowerShell模块(.psm1),我已经将它导入到我的主脚本中。然而,该模块需要调用位于其同一目录中的批处理文件,但显然这是无法看到它。目前有问题的功能是这样的:Powershell模块和调用文件

function MyFunction 
{ 
    & .\myBatch.bat $param1 $param2 
} 

我该如何使函数看到批处理文件?

回答

3

.是当前工作目录,而不是模块所在的目录。后者可以通过MyInvocation variable来确定。你的函数改成这样:

function MyFunction { 
    $Invocation = (Get-Variable MyInvocation -Scope 1).Value 
    $dir = Split-Path $Invocation.MyCommand.Path 
    $cmd = Join-Path $dir "myBatch.bat" 
    & $cmd $param1 $param2 
} 
+0

为什么你要访问** ** MyInvocation在父范围是什么?它不会在本地(脚本)范围内定义吗?我测试了这个,它不起作用 - **。Path **属性为空。我刚刚从脚本访问** $ MyInvocation **直接与没有权限修饰。 –

+0

该功能在模块中定义,他需要该模块的路径,而不是导入模块的脚本。 –

+0

哦,好点,我忽略了这一点。 –

1

试试这个:

function MyFunction { 
    & (Join-Path (Split-Path $MyInvocation.MyCommand.Path) 'myBatch.bat') $param1 $param2 
}