[英]C# calling PowerShell and passing environment variables
我正在嘗試從 C# 調用 PowerShell 代碼,但環境變量沒有得到“繼承”,當我嘗試手動將環境變量設置為空時。
// The difference between CreateDefault and CreateDefault2 is that
// CreateDefault includes engine snap-ins, while CreateDefault2 does not.
var initialState = InitialSessionState.CreateDefault2();
initialState.EnvironmentVariables.Add(Environment.GetEnvironmentVariables()
.Cast<DictionaryEntry>()
.Select(x => new SessionStateVariableEntry(x.Key.ToString(), x.Value,
$"Setting environment variable {x.Key} to {x.Value}")));
using var ps = PowerShell.Create(initialState);
var results = await ps.AddScript("dir env:").InvokeAsync();
foreach (var result in results)
{
Debug.Write(result.ToString());
}
這是我得到的results
Enumeration yielded no results
請嘗試以下操作:
public static async Task<string> Execute()
{
StringBuilder sb = new StringBuilder();
// The difference between CreateDefault and CreateDefault2 is that
// CreateDefault includes engine snap-ins, while CreateDefault2 does not.
var initialState = InitialSessionState.CreateDefault2();
initialState.EnvironmentVariables.Add(Environment.GetEnvironmentVariables()
.Cast<DictionaryEntry>()
.Select(x => new SessionStateVariableEntry(x.Key.ToString(), x.Value,
$"Setting environment variable {x.Key} to {x.Value}")));
using var ps = PowerShell.Create(initialState);
var results = await ps.AddScript("dir env:").InvokeAsync();
//var results = await ps.AddCommand("Get-ChildItem").AddParameter("Path", "Env:").InvokeAsync();
foreach (PSObject outputItem in results)
{
DictionaryEntry entry = (DictionaryEntry)outputItem.BaseObject;
Debug.WriteLine($"EnvVar Key: '{entry.Key}' Value: '{entry.Value}'");
sb.AppendLine($"{entry.Key}: {entry.Value}");
}
return sb.ToString();
}
資源:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.