如何在脚本中使用$ Env变量?

时间:2013-11-28 16:05:07

标签: c# powershell

我正在使用C#执行powershell脚本,但是当我尝试在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 ? 

3 个答案:

答案 0 :(得分:0)

也许您可以在PowerShell脚本中尝试使用此代码。无论脚本如何被调用,这都应该有效:

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

可以找到有关此类环境变量操作的更多信息here

答案 1 :(得分:0)

唯一让我想到的是,在创建运行空间时,您没有传入配置。

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

我唯一能够托管Powershell的是为Powershell插件编写单元测试。代码在这里:https://github.com/openxtra/TimeTag/tree/master/Test

请参阅测试项目的DatabasePoSHSnapInTest和PowerStatsPoSHSnapInTest文件夹。

答案 2 :(得分:0)

更改此行:

Command command = new Command(script, false);

Command command = new Command(script, true);

您的script变量是一个脚本(多个命令)。通过传递false,PowerShell认为script命名命令。