Включение второго уровня - PullRequest
1 голос
/ 31 октября 2011

У меня есть функция, которая включает в себя другие скрипты:

function include-function($fileName)
{   
    .$fileName
}

Я сохраняю эту функцию в другом скрипте

Из основного сценария я хочу сначала включить этот сценарий, а затем включить другой сценарий:

."c:\1.ps1"                          #include first file
include-function "c:\2.ps1"          #call function to include other functions
xtest "bbb"                          #function from 2.ps1 that should be included

Проблема в том, что функция xtest из 2.ps1 не видна в основном скрипте, она видна только в области действия include-функции. Есть ли способ передать xtest в основной скрипт?

Моя функция include не загружает файл (он получает его как строку из API), поэтому я не могу вызвать его напрямую из основного скрипта. В качестве обходного пути я просто изменил include-функцию, чтобы она возвращала мне содержимое файла, а затем из основного скрипта я вызываю Invoke-Expression (include-функция "c: \ 2.ps1")

Спасибо

1 Ответ

3 голосов
/ 03 ноября 2011

Объяснение - это область действия ваших переменных и функций, если в 2.ps1 вы объявите свои переменные и функции как глобальные, они будут видны в глобальной области видимости.

Пример 2.ps1:

$global:Var2="Coucou"

function global:Test2 ([string]$Param)
{
  write-host $Param $Param
}

использование test.ps1:

function include-function($fileName)
{   
    .$fileName
}

Clear-Host

include-function "c:\silogix\2.ps1" 

Test2 "Hello"

дает:

Hello Hello

Когда вы пометите свой вопрос в PowerShell V2.0, вам лучше иметьвзгляд на модули.использование модуля закончится в лучшем структурированном программировании, см. about_Modules .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...