2015-01-23 9 views
1

Как я могу получить переменную $ test из приложения C#?C# получить переменную из скрипта powershell

Я пробовал так:

RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create(); 
Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration); 
runspace.Open(); 

RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace); 

Pipeline pipeline = runspace.CreatePipeline(); 
//Here's how you add a new script with arguments 
Command myCommand = new Command(scriptFile); 
CommandParameter testParam = new CommandParameter("key", "value"); 
CommandParameter testParam2 = new CommandParameter("key", "value"); 
CommandParameter testParam3 = new CommandParameter("key", "value"); 
myCommand.Parameters.Add(testParam); 
myCommand.Parameters.Add(testParam2); 
myCommand.Parameters.Add(testParam3); 

pipeline.Commands.Add(myCommand); 

// Execute PowerShell script 
var results = pipeline.Invoke(); 
var resultVariable = runspace.SessionStateProxy.PSVariable.GetValue("test"); 

resultVariable является null. Но я заполнил его в powershell с int (т. Е. $ Test = 4).

+1

Вам не нужно использовать 'GetValue (« $ test »)' (с '$') вместо этого? –

+0

Это тоже не работает ... Я могу вызвать функцию с переменной PSHome, это работает. Но не переменная, которую я установил. – greenhoorn

+0

Может быть дубликат: http://stackoverflow.com/questions/17467629/return-powershell-variable-value-to-c-sharp-application –

ответ

3

Использовать $global:test=4 в сценарии или запустить скрипт в том же объеме. По умолчанию скрипт запускается в своей области, поэтому любая переменная, измененная в скрипте, не видна снаружи.

+0

Спасибо, вот и все! – greenhoorn

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