2013-11-28 3 views
1

Я выполняю скрипт powershell с использованием C#, но когда я пытаюсь получить переменную окружения внутри скрипта powershell, это не сработает.

Если я запускаю скрипт powershell вручную, используя консоль, он работает.

У вас есть идея, как решить эту проблему?

Пример кода для C#:

Runspace runspace = RunspaceFactory.CreateRunspace(); 
runspace.Open(); 

// set directory for ps 
if (!string.IsNullOrEmpty(sessionPath)) 
    runspace.SessionStateProxy.Path.SetLocation(sessionPath); 

Pipeline pipeline = runspace.CreatePipeline(); 
Command command = new Command(script, false); 
pipeline.Commands.Add(command); 
pipeline.Commands.Add("Out-String"); 
pipeline.InvokeAsync(); 

сценарий PowerShell:

$path = $env:PATH; 
write-output $path # this is empty ! $env does seems to exist in the runspace ? 
+0

Я нашел обходное решение, используя скрипт [здесь] (http://stackoverflow.com/a/14382047/1832488), но я бы предпочел найти, как настроить пространство, чтобы была установлена ​​переменная Env. – codea

ответ

0

Изменить эту строку:

Command command = new Command(script, false); 

в

Command command = new Command(script, true); 

Ваш script переменная представляет собой скрипт (несколько команд). Передавая false, PowerShell считает, что script называет команду.

+0

Я передаю путь к файлу .ps1 как команду, если я использую (script, true), он не работает. – codea

+0

Чтобы он работал, я сначала прочитал файл как строку, затем использовал команду command = new Command (script, true); – codea

0

Может быть, вы могли бы попробовать этот код вместо в сценарии PowerShell. Это должно работать независимо от того, как вызывается скрипт:

$path = [environment]::GetEnvironmentVariable("Path") 
write-output $path 

Более подробную информацию о переменной окружения манипуляции такого рода можно найти here.

+0

Я пробовал, но он не работает. Спасибо за информацию. – codea

0

Единственное, что приходит на ум, это то, что вы не передаете конфигурацию при создании пробела.

var config = RunspaceConfiguration.Create(); var runspace = RunspaceFactory.CreateRunspace(config); ...

Единственное, что я сделал хостинг Powershell писал тесты для плагина Powershell. Код находится здесь: https://github.com/openxtra/TimeTag/tree/master/Test

См. Папки базы данныхPoSHSnapInTest и PowerStatsPoSHSnapInTest для тестовых проектов.

+0

Не работал, когда я создаю новую конфигурацию, и передаю ее в свою рабочую область. – codea

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