Код работает вне функции (), а не внутри? - PullRequest
0 голосов
/ 17 июня 2019

Пытаюсь обернуть голову, почему это работает в одну сторону, а не в другую. Я уже провел некоторые поиски, и ответ представлен здесь:

Как вызвать функцию вне блока скриптов

Кажется, довольно близко к тому, что я испытываю, но я не могу понять, почему одна версия работает нормально, а другая - нет. Я попытался достаточно упростить код в моем примере ниже, не теряя смысла того, что это такое.

Краткий обзор высокого уровня

Я запускаю скрипт (Script A), который включает несколько модулей в отдельной папке. При запуске сценария A он вызывает сценарий B, который на основе $ moduleName вызовет основную функцию этих модулей (которая всегда равна $ moduleName).

Это работает:

Сценарий A

. "$PSScriptRoot/scriptB.ps1"

#getModules - pulls in a dynamic list of modules
$modules = Get-ChildItem ./modules/* -Include *.ps1 | Select-Object Name
foreach ($module in $modules) {
    $moduleName = $module.Name
    . "$PSScriptRoot/modules/$moduleName"
}

runScript

Сценарий B

function runScript {
    try { 
        $sb = (Get-Command $moduleName -CommandType Function -ErrorAction Stop).ScriptBlock
        Invoke-Command -ScriptBlock $sb -ErrorAction Stop
    } catch {
        Write-Host "Something didn't work"
    }
}

Это не:

Сценарий A - v2

. "$PSScriptRoot/scriptB.ps1"

#getModules - pulls in a dynamic list of modules
function getModules {
    $modules = Get-ChildItem ./modules/* -Include *.ps1 | Select-Object Name
    foreach ($module in $modules) {
        $moduleName = $module.Name
        . "$PSScriptRoot/modules/$moduleName"
    }
}
getModules
runScript

Выдает ошибку, похожую на:

: термин 'moduleName.ps1' не распознается как имя командлета, функции, файла сценария или работоспособной программы.

Возвращение к рабочей версии не возвращает эту ошибку. Любые отзывы приветствуются. Я могу просто продолжать работать с рабочей версией, но я хотел бы понять, почему она работает, чтобы убедиться, что я не делаю ошибок, поскольку я самообучаюсь.

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