2013-07-11 4 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 ** равно null. Я бы просто получил доступ к ** $ MyInvocation ** непосредственно из сценария без модификаторов области. –

+0

Функция определена в модуле, и ему нужен путь этого модуля, а не скрипт, импортирующий модуль. –

+0

О, хорошо, я не обратил на это внимания. –

1

Попробуйте это:

function MyFunction { 
    & (Join-Path (Split-Path $MyInvocation.MyCommand.Path) 'myBatch.bat') $param1 $param2 
} 
Смежные вопросы