Получение GetExecutingRequests из PowerShell в объект C # - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь извлечь данные из PowerShell в объект ac #.Данные, которые я ищу, возвращаются из PowerShell Invoke () GetExecutingRequests на удаленном веб-сервере.У меня проблема в том, что я не получаю код ошибки, но результаты нужной мне функции Invoke () нигде не указаны в возвращаемых данных или объекте PowerShell.

using (Runspace runspace = RunspaceFactory.CreateRunspace(cxn))
            {
                runspace.Open();
                using (PowerShell ps = PowerShell.Create())
                {
                    ps.Runspace = runspace;

                    string script = String.Format("Get-WmiObject 
    WorkerProcess -Namespace root\\WebAdministration -ComputerName {0} | 
    Invoke-WmiMethod -Name GetExecutingRequests", server);

                    ps.AddScript(script);
                    ps.AddParameter("OutputElement", new HttpRequest[0]);

                    var result = ps.Invoke();
                }
            }  

Этот код выполняется и возвращает коллекцию из 29 элементов.Однако ни один из них не показывает результаты GetExecutingRequests, и в объекте PowerShell также нет ничего релевантного.

Я хотел бы получить выходные данные GetExecutingRequests в объект ac #, чтобы я мог выполнить дальнейшую обработку.PSDataStreams для объекта ps также не дает результатов.

Любая помощь будет оценена.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

Мне удалось решить эту проблему с помощью изменения PowerShell.сценарий, который я отправлял:

string script = String.Format("Get-WmiObject WorkerProcess -Namespace root\\WebAdministration -ComputerName {0} | Invoke-WmiMethod -Name GetExecutingRequests | %{{ $_ | Select-Object -ExpandProperty OutputElement }}", server);

1 Ответ

0 голосов
/ 04 мая 2019

Я не совсем уверен, смогу ли я разрешить результаты напрямую, но я бы посоветовал запустить команду ниже, чтобы получить некоторую дополнительную информацию о возвращаемом объекте. Оттуда вы можете посмотреть, как вы справитесь с возвратом в C #.

Get-WmiObject -Class $(<scriptblock>) | get-member
  1. Определите типы объектов в C # и посмотрите, сможете ли вы сначала захватить его таким образом.

Если вы не можете добиться какого-либо прогресса в захвате типа объекта, возвращаемого в powershell, возможно, стоит опубликовать здесь, чтобы посмотреть, сможет ли кто-нибудь еще предложить какое-либо понимание или опыт с обходными путями для взаимодействия этих объектов вводит в C #.

  1. Если вышеупомянутое действительно невозможно, принудительное использование PowerShell для возврата всего из стандартного поможет найти в нем что-нибудь значимое, что вы можете очистить / отформатировать в C #. Я думаю, что лучший способ сделать это в приведенной вами команде powershell будет выглядеть так:

    return $ (Get-WmiObject WorkerProcess -Namespace root \ WebAdministration -ComputerName {0} | Invoke-WmiMethod -Name GetExecutingRequests | *> & 1)

Возвращает все 5+ стандартных выходов из powershell в возвращаемый объект (для тех, кто читает, см. эти документы в потоках ps ). Вы, безусловно, сможете зафиксировать возврат в вашей переменной результатов, но это не помешает убедиться, что вы можете выбросить / перехватить ошибки от переполнения.

Надеюсь, это поможет продолжить раскопки!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...