Я надеюсь запускать некоторые 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
-
Не может вызвать эту функцию, потому что текущий хост не реализует ее.
Каковы некоторые хорошие варианты для того, чтобы обходить эту проблему?
Один из вариантов - создать функцию хоста записи и внедрить ее в ваше пространство выполнения. Функция будет иметь приоритет перед одноименным командлетом. В этой функции вы можете ничего не делать или, возможно, использовать [console] :: Writeline (), если ваше приложение является консольным приложением, или если ваше приложение является приложением с графическим интерфейсом пользователя, вставьте какой-либо объект в сеанс PowerShell, чтобы функция могла записывать выходные данные в (посмотрите Runspace.SessionStateProxy.SetVariable).
Другой (немного более сложный) вариант - реализовать интерфейсы хостинга PowerShell в вашем приложении .