我正在使用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 ?
答案 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
命名命令。