C# Powershell Pipeline вывод / ответ
В настоящее время я занимаюсь разработкой веб-службы aC#, которая представляет собой "человека посередине". Клиент может вызывать метод executeScript(String script), и мои веб-службы вызывают сценарий.
В настоящее время веб-сервис не знает, какие скрипты будет выполнять клиент (обычно это скрипты для обмена). Как я правильно прочитал вывод? например, получить процесс или что-то еще.
Моя ошибка чтения уже работает. Пример сценария: "Get-Mailbox xxxxx"
if (pl.Error.Count > 0)
{
//error in pipeline
var errorList = pl.Error.Read() as Collection<ErrorRecord>;
if (errorList != null)
{
foreach (ErrorRecord er in errorList)
{
logger.Error(er.Exception.Message);
ExceptionObject eo = new ExceptionObject();
eo.message = er.Exception.Message;
eo.source = er.Exception.Source;
eo.stackTrace = er.Exception.StackTrace;
errors.Add(eo);
}
}
if (pso != null)
{
foreach (PSObject o in pso)
{
logger.Info("size: " + o.Properties.Count());
logger.Info(o.ToString());
foreach (PSPropertyInfo psprop in o.Properties)
{
sb.AppendLine("Name: " + psprop.Name + ", Value: " + psprop.Value + ", MemberType: " + psprop.MemberType);
}
}
logger.Info(pso.ToString());
pro.result = sb.ToString();
}
logger.Info (o.ToString ()); -> Get-Mailbox xxxxx
Свойства: "Имя: Длина, Значение: 19, Тип участника: Свойство"
Это не правильный вывод. Есть ли способ, чтобы получить ответ в виде строки, как это происходит в оригинальной консоли PowerShell? (Динамически на каждом сценарии!)
2 ответа
PSObject - это оболочка вокруг фактического объекта, который был возвращен. Вы хотите использовать PSObject.BaseObject.
Пожалуйста, обратите внимание на Windows Remote Management (WinRM), это позволяет удаленно выполнять сценарии PowerShell.
Использование WinRM, скорее всего, будет лучшим решением, чем создание веб-службы, поскольку вы можете ограничить возможности удаленного доступа. Ваш веб-сервис, вероятно, будет содержать дыры в безопасности, позволяющие выполнять нежелательный код с ограниченным ведением журнала того, кто что выполнял.