PowerShell 5.1: сделать функцию доступной для используемого модуля - PullRequest
0 голосов
/ 18 июня 2020

У меня есть сценарий, который предоставляет небольшой интерфейс управления путем запуска миниатюрного веб-сервера в PowerShell с использованием объекта System.Net.HttpListener. Он «использует» 4 модуля (*.psm1 файлов) с директивами Use Module <module name> в верхней части файла. В сценарии веб-сервера есть общая функция, называемая Read-Html, которая должна быть доступна для использования модулями. В более старой версии PowerShell (я не помню версию, но уверен, что она была не ниже 4.2) на другом компьютере этот код работал отлично. Теперь я пытаюсь сделать небольшое обновление, и PowerShell жалуется, что Read-Html не может быть найден с CommandNotFoundException. В сценарии веб-сервера нет классов, но в файлах модуля весь код находится в классах. Когда требуются функциональные возможности модуля, сценарий веб-сервера создает экземпляр соответствующего класса. Функция Read-Html объявляется до создания экземпляра любого из классов модулей.

Вот пример кода, который создает экземпляр класса и читает из него (это одна из нескольких записей в switch block) ComputerProfle - это имя класса из модуля:

      "GET /computer"{
        if($parameters.Count -gt 1){
          [ComputerProfile] $theProfile = [ComputerProfile]::new($databasePath, $parameters)
          $html = $theProfile.getHtml()
          $theProfile.cleanup()
        }
        else {
          $html = (Read-Html "computer.html" $navHash)
        }
      }

Функция Read-Html здесь работает как положено. Внутри модуля вызывается Read-Html для загрузки шаблона HTML, который заполняется информацией, которая затем возвращается методом getHtml(). Однако при вызове внутри модуля PowerShell выдает исключение CommandNotFoundException:

Read-Html : The term 'Read-Html' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At C:\fake\project\path\modules\computer.psm1:203 char:40
+                             $posts += (Read-Html "post-body.html" $po ...
+                                        ~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Read-Html:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Как сделать функцию Read-Html доступной для модулей?

1 Ответ

0 голосов
/ 20 июня 2020

В итоге я переместил функцию Read-Html (несколько других) в новый файл с именем commons.psm1 и импортировал его с Use Module везде, где это необходимо. Работает именно так, как мне нужно.

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