Я получаю смешанные результаты с доступностью пользовательских функций в пользовательских модулях на удаленных компьютерах, в зависимости от того, как я загружаю модуль. Деталь выглядит следующим образом:
Я написал собственный модуль, в котором есть единственный файл функции. Структура следующая:
- C:\PowerShell-Modules\ModuleName
- C:\PowerShell-Modules\ModuleName.psd1
- C:\PowerShell-Modules\MyFunction.ps1 (contains a function called MyFunction).
Чтобы полагаться на автоматическую загрузку модулей, я изменяю $env:PSModulePath, чтобы он содержал «C:\PowerShell-Modules\».
В моем сценарии (например, PassRemote.ps1) «MyFunction» доступна и работает, как и ожидалось. Однако при попытке запустить это на удаленном компьютере:
Invoke-Command -ComputerName $computername -UseSSL -ScriptBlock ${function:MyFunction} -ArgumentList $arg1
... происходит сбой, сообщая, что командлет/функция не распознана.
Единственный способ, которым я могу передать пользовательскую функцию, - это явно загрузить модуль в скрипт. Чтобы было ясно, мне нужно написать строку:
Import-Module ModuleName
в родительском скрипте (PassRemote.ps1). Только после этого функция может быть передана удаленному сеансу.
Это проблема масштаба?
powershell.exe
, аwsmprovhost.exe
, возможно, автоматическая загрузка не поддерживается при удаленном взаимодействии. - person walid toumi   schedule 18.09.2014using
). Однако я не хочу вручную загружать модули. Однако я думаю, что наткнулся на причину. Я напишу предлагаемый ответ ниже. - person Robin   schedule 18.09.2014