Как запустить скрипты PowerShell через автоматизацию, не сталкиваясь с проблемами Хоста

Я надеюсь запускать некоторые powershell скрипты через автоматизацию. Что-то как:

IList errors;
Collection<PSObject> res = null;
using (RunspaceInvoke rsi = new RunspaceInvoke())
{
    try
    {
        res = rsi.Invoke(commandline, null, out errors);
    }
    catch (Exception ex)
    {
        LastErrorMessage = ex.ToString();
        Debug.WriteLine(LastErrorMessage);
        return 1;
    }
}

проблема, с которой я сталкиваюсь, является этим, если мой сценарий использует cmdlets такой как write-host вышеупомянутые броски System.Management.Automation.CmdletInvocationException -

Не может вызвать эту функцию, потому что текущий хост не реализует ее.

Каковы некоторые хорошие варианты для того, чтобы обходить эту проблему?

7
задан Scott Weinstein 16 April 2010 в 23:31
поделиться

1 ответ

Один из вариантов - создать функцию хоста записи и внедрить ее в ваше пространство выполнения. Функция будет иметь приоритет перед одноименным командлетом. В этой функции вы можете ничего не делать или, возможно, использовать [console] :: Writeline (), если ваше приложение является консольным приложением, или если ваше приложение является приложением с графическим интерфейсом пользователя, вставьте какой-либо объект в сеанс PowerShell, чтобы функция могла записывать выходные данные в (посмотрите Runspace.SessionStateProxy.SetVariable).

Другой (немного более сложный) вариант - реализовать интерфейсы хостинга PowerShell в вашем приложении .

11
ответ дан 6 December 2019 в 23:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: