PowerShell, вызов функции из другого скрипта PS и возврат объекта - PullRequest
2 голосов
/ 16 ноября 2010

Как можно вызвать функцию из другого скрипта PowerShell, возвращающую объект?

Основной скрипт:

# Run function script
. C:\MySystem\Functions.ps1

RunIE

$ie.Navigate("http://www.stackoverflow.com")  
# The Object $ie is not existing

Сценарий функций:

function RunIE($ie) 
{
$ie = New-Object -ComObject InternetExplorer.Application
}

Ответы [ 2 ]

5 голосов
/ 16 ноября 2010

Просто «выведите» объект из функции следующим образом:

function RunIE
{ 
    $ie = New-Object -ComObject InternetExplorer.Application 
    Write-Output $ie
} 

или более идиоматически

function RunIE 
{ 
    New-Object -ComObject InternetExplorer.Application 
} 

Затем назначьте вывод переменной в основном сценарии:

$ie = RunIE
2 голосов
/ 17 ноября 2010

Кит предоставил ответ , который является лучшим решением для вашей проблемы.В любом случае, я хотел бы добавить что-то, чтобы получить более полный ответ.

Если ваша функция определена так:

function getvars
{
    $a = 10
    $b = "b"
}

, тогда она просто создает новую переменную в области действия функции RunIE и назначает что-то в нем.После завершения функции переменная $ie отбрасывается.

В некоторых случаях (я использую это для некоторого типа отладки), вам может потребоваться выполнить функцию в текущей области видимости, которая называется `точечный поиск '.Просто попробуйте Google, и вы увидите.

PS> $a = 11
PS> getvars
PS> $a, $b
11

PS> $a = 11
PS> . getvars
PS> $a, $b
10
b
...