1
我有一个基于脚本的PowerShell模块(.psm1),我已经将它导入到我的主脚本中。然而,该模块需要调用位于其同一目录中的批处理文件,但显然这是无法看到它。目前有问题的功能是这样的:Powershell模块和调用文件
function MyFunction
{
& .\myBatch.bat $param1 $param2
}
我该如何使函数看到批处理文件?
我有一个基于脚本的PowerShell模块(.psm1),我已经将它导入到我的主脚本中。然而,该模块需要调用位于其同一目录中的批处理文件,但显然这是无法看到它。目前有问题的功能是这样的:Powershell模块和调用文件
function MyFunction
{
& .\myBatch.bat $param1 $param2
}
我该如何使函数看到批处理文件?
.
是当前工作目录,而不是模块所在的目录。后者可以通过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
}
试试这个:
function MyFunction {
& (Join-Path (Split-Path $MyInvocation.MyCommand.Path) 'myBatch.bat') $param1 $param2
}
为什么你要访问** ** MyInvocation在父范围是什么?它不会在本地(脚本)范围内定义吗?我测试了这个,它不起作用 - **。Path **属性为空。我刚刚从脚本访问** $ MyInvocation **直接与没有权限修饰。 –
该功能在模块中定义,他需要该模块的路径,而不是导入模块的脚本。 –
哦,好点,我忽略了这一点。 –