Вызов функций Powershell из С#
У меня есть файл PS1 с несколькими функциями Powershell. Мне нужно создать статическую DLL, которая читает все функции и их определения в памяти. Затем он вызывает одну из этих функций, когда пользователь вызывает DLL и передает имя функции, а также параметры для этой функции.
Мой вопрос: возможно ли это сделать. т.е. вызвать функцию, которая была прочитана и сохранена в памяти?
Спасибо
Ответы
Ответ 1
Здесь эквивалентный код С# для упомянутого выше кода
string script = "function Test-Me($param1, $param2) { \"Hello from Test-Me with $param1, $param2\" }";
using (var powershell = PowerShell.Create())
{
powershell.AddScript(script, false);
powershell.Invoke();
powershell.Commands.Clear();
powershell.AddCommand("Test-Me").AddParameter("param1", 42).AddParameter("param2", "foo");
var results = powershell.Invoke();
}
Ответ 2
Это возможно и более чем одним способом. Вот, наверное, самый простой.
Учитывая, что наши функции находятся в MyFunctions.ps1
script (только один для этой демонстрации):
# MyFunctions.ps1 contains one or more functions
function Test-Me($param1, $param2)
{
"Hello from Test-Me with $param1, $param2"
}
Затем используйте приведенный ниже код. Он находится в PowerShell, но буквально переводится на С# (вы должны это сделать):
# create the engine
$ps = [System.Management.Automation.PowerShell]::Create()
# "dot-source my functions"
$null = $ps.AddScript(". .\MyFunctions.ps1", $false)
$ps.Invoke()
# clear the commands
$ps.Commands.Clear()
# call one of that functions
$null = $ps.AddCommand('Test-Me').AddParameter('param1', 42).AddParameter('param2', 'foo')
$results = $ps.Invoke()
# just in case, check for errors
$ps.Streams.Error
# process $results (just output in this demo)
$results
Вывод:
Hello from Test-Me with 42, foo
Подробнее о классе PowerShell
см. ниже:
http://msdn.microsoft.com/en-us/library/system.management.automation.powershell
Ответ 3
Я не уверен, полностью ли я понял этот вопрос, но не мог ли вы просто выполнить запуск исполняемого файла powershell с файлом powershell script и именем функции? Точка powershell, безусловно, обеспечивает не программный (оболочный) доступ к настраиваемой функциональности...