Не знаете, как обрабатывать ответы powershell в .NET - PullRequest
0 голосов
/ 24 января 2012

У меня есть 2 сценария powershell, которые я выполняю из c #, которые я использую для первого вывода списка сообщений с помощью командлета IMAP, а второй сценарий выполняет просмотр определенного сообщения.Оба успешно выполняются из powershell, второе - я пытаюсь получить вложение, и я вижу кучу данных, выводимых на консоль, примерно так ...

   Sent from my iPhone
   ------=_NextPart_000_0027_01CCDAA7.399EBE00
   Content-Type: image/jpeg; name="photo.JPG"
   Content-Transfer-Encoding: base64
   Content-Disposition: attachment; filename="photo.JPG"

   /9j/4QH6RXhpZgAATU0AKgAAAAgACgEPAAIAAAAGAAAAhgEQAAIAAAAHAAAAjAESAAMAAAABAAYA
   AAEaAAUAAAABAAAAlAEbAAUAAAABAAAAnAEoAAMAAAABAAIAAAEyAAIAAAAUAAAApAITAAMAAAAB
   AAEAAIdpAAQAAAABAAAAuIglAAQAAAABAAABZgAAAABBcHBsZQBpUGhvbmUAAAAAAEgAAAABAAAA
   SAAAAAEyMDA5OjA5OjIwIDE1OjEwOjU1AAAKgp0ABQAAAAEAAAE2kAAABwAAAAQwMjIxkAMAAgAA
   ABQAAAE+kAQAAgAAABQAAAFSkQEABwAAAAQBAgMAoAAABwAAAAQwMTAwoAEAAwAAAAEAAQAAoAIA
   BAAAAAEAAAZAoAMABAAAAAEAAASwpAYAAwAAAAEAAAAAAAAAAAAAAA4AAAAFMjAwOTowOToyMCAx

, так что, похоже, пока все в порядке -кроме того, я полагаю, что разница в результате функции как возможный поток / канал от powershell?

Первый возвращает коллекцию PSObjects, которая называется так:

            PowerShell ps = PowerShell.Create();
            ps.Runspace = runspace;
            ps.AddScript(script);
            ps.Invoke();

            foreach (PSObject result in ps.Invoke())
            {
                dynamic val = result.BaseObject;
            }

ВторойСценарий выполняется без ошибок с использованием Invoke (), однако при попытке получить данные через для каждого или

dynamic xx = ps2.Invoke();

xx пусто;

Я подумал, может быть, мне нужно использовать BeginInvoke и вызывать асинхронно, поэтому я попытался

    static dynamic GotMail(dynamic o)
    {
        return o;
    }

    delegate dynamic SomeDelegate(dynamic o);

    and attempted to use like so..

          SomeDelegate sd = GotMail;
          IAsyncResult ar = ps2.BeginInvoke();


          dynamic val2 = sd.EndInvoke(ar);

и я получаю "Асинхронный объект результата имеет значение null или имеет неожиданный тип." Я даже не передаю параметры в сценарии powershell .. все жестко закодировано -Скрипт, который я успешно запускаю из powershell, - это именно то, что я выполняю из .NET

Любые предложения по этому поводу очень ценятся.

Спасибо

1 Ответ

1 голос
/ 24 января 2012

Вы дважды вызываете скрипт, дважды вызывая Invoke ().Удалить первый вызов для вызова, например:

PowerShell ps = PowerShell.Create();
ps.Runspace = runspace;
ps.AddScript(script);
//ps.Invoke();
foreach (PSObject result in ps.Invoke()) {
    dynamic val = result.BaseObject;
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...