У меня есть сценарий, который предоставляет небольшой интерфейс управления путем запуска миниатюрного веб-сервера в 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
доступной для модулей?