2015-04-24 1 views
1

Например, одна (плохая) идея заключалась в том, чтобы импортировать модуль из строки, определенной в файле (я не знаю, могу ли я это сделать без первой записи этой строки в файловую систему)Можно ли скрывать внутренние вспомогательные методы в сценарии ps1 Powershell?

Я пишу сценарий, который я хочу выполнить удаленно, и после this answer Я использую «Сценарий». Тем не менее, я хочу каким-то образом скрыть некоторые функции - мне нужен какой-то модуль внутри скрипта.

Или существует совершенно другой подход к тому, что я пытаюсь сделать? Все мои скрипты/модули на стороне клиента, и я хочу запустить их в удаленной PSSession. Я не особо хочу обрабатывать копирование сценариев на удаленный сервер или общий диск.

Я использую следующее усеивают Source мой сценарий в удаленном PSSession:

invoke-command -Session $s -FilePath $p 

, а затем применение в ScriptBlock использования функций, определенных в файле сценария $p. Это работает, но я не думаю, что это работает с модулями, и если я хочу повторно использовать код в других сценариях, я либо должен вручную импортировать каждый из них в удаленный сеанс, либо дублировать код в одном монолитном сценарии. Ни один из них не привлекателен, и, похоже, ничто не скрывает «частные» методы.

+3

Я думаю, что ты нарисовал себя в угол. Если все компоненты скрипта будут находиться на локальном компьютере, пользователь должен будет прочитать его, чтобы вызвать его. – mjolinor

+0

@mjolinor - Я не понимаю, почему это обязательно так. Например. если у меня есть файл модуля, который я могу прочитать, неэкспортированные методы в этом файле модуля все еще «скрыты» при импорте модуля. Это то, что я подразумеваю под «скрытым» – Rob

+0

Из Get-Help Import-Module: Описание Командлет Import-Module добавляет к текущему сеансу один или несколько модулей. Импортируемые модули должны быть установлены на локальном компьютере или удаленном компьютере. – mjolinor

ответ

2

Вы можете использовать New-Module команду:

New-Module { 
    function a { 
     b 
    } 
    function b { 
     'function b called' 
    } 
    Export-ModuleMember a 
}|Out-Null 
a #OK 
b #Error 
+0

Отлично! Благодаря! И подключив его к модулю Import-Module, я могу удалить его позже, если захочу – Rob

Смежные вопросы