2015-08-18 2 views
0

Я работа на ASP.NET MVC веб-приложения и я звоню Powershell сценариев внутри моего веб-приложения, следующим образом: -как читать возвращаемые значения от запуска Powershell скрипт

var shell = PowerShell.Create(); 

string PsCmd = "add-pssnapin VMware.VimAutomation.Core; $vCenterServer = '" + vCenterName + "';$vCenterAdmin = '" + vCenterUsername + "' ;$vCenterPassword = '" + vCenterPassword + "';" + System.Environment.NewLine; 

PsCmd = PsCmd + "$VIServer = Connect-VIServer -Server $vCenterServer -User $vCenterAdmin -Password $vCenterPassword;" + System.Environment.NewLine; 

PsCmd = PsCmd + "Get-VMHost " + System.Environment.NewLine; 

shell.Commands.AddScript(PsCmd); 

var results = shell.Invoke(); 

теперь будет получат следующие значения: -

enter image description here

так может кто-нибудь adivce, как я могу получить доступ к значениям, например, как строить, или петлю Копания Чет NetworkInfo? благодаря EDIT полный след фото: - enter image description here

+0

Не 'Строй' там для вас? –

+0

@CliveDM Я имею в виду, как я могу получить к нему доступ, поскольку я обычно имею дело с сильно типизированными объектами, где я пишу что-то вроде modelobkect.buiild; .. –

+0

Ухх, что вы можете использовать ключевое слово 'dynamic'. –

ответ

1

dynamic С ключевым словом, вы не должны знать сильный тип одного объекта. На самом деле, без необходимости знать тип заранее, вы можете использовать это, как и ожидалось: переменной может быть что угодно.

Например, я мог бы объявить метод как это:

static void DynamicTest(dynamic arg) 
    { 
     Console.WriteLine(arg.aaa); 
    } 

DynamicTest доступ aaa поле (или свойство) в arg, не зная, что имеет ли arg сам по себе aaa или нет. Использование dynamic означает, что вы не хотите, чтобы компилятор обнаруживал возможные ошибки, которые вы можете или не можете получить от какой-либо переменной, которая на самом деле ее не имеет.

Вы можете вызвать этот метод с:

DynamicTest(new {aaa = "I am accessible"}); 

он будет работать, и вы можете вызвать этот метод с:

DynamicTest(1); // I will cause runtime exception 

Таким образом, в вашей конкретной ситуации, вы можете определить переменную result как динамический, так как теперь вы знаете, что получите переменную, содержащую несколько свойств, которые вы хотите использовать.

var res = shell.Invoke()[0]; 
dynamic obj = res.BaseObject; 

Поэтому вы можете использовать его как обычную переменную (без IntelliSense, конечно).

Console.WriteLine(obj.Build); // Now I can compile yay! 

Здесь.

+0

, но когда я пытаюсь выполнить следующие «results.Build», я получил следующую ошибку: «System.Collections.ObjectModel.Collection » не содержит определения для «Build» –

+0

@johnG Ну, этот «результат» кажется «сборником», установленным точку останова на ней и проверить, что она имеет. Изображение не похоже на корень, попробуйте опубликовать фактическую структуру дерева здесь. –

+0

он находится под [0], тогда я получил базу –

Смежные вопросы