使用C#/ .Net执行PowerShell脚本时,我想添加 $ PSModulePath的路径,而不会覆盖默认的$ PSModulePath。
我已经想出如何使用InitialSessionState.EnvironmentVariables将$ PSModulePath设置为我选择的值。但是,这种方法不可取,因为替换默认的$ PSModulePath而不是追加。
var state= InitialSessionState.CreateDefault();
state.EnvironmentVariables.Add(new SessionStateVariableEntry("PSModulePath", myModuleLoadPath, "PowerShell Module Search Locations"));
var runSpace = RunspaceFactory.CreateRunspace(initialState);
using (var powershell = PowerShell.Create())
{
powershell
.AddScript(script)
.Invoke();
}
有没有办法以编程方式将.Net API 追加用于$ PSModulePath?
答案 0 :(得分:2)
显然,在Set-DnsServerRessourceRecord
打开之前,环境变量PSModulePath
不会使用默认PSModulePath
填充。将Runspace
设置为传递给PSModulePath
的{{1}}可以抑制此自动填充。
要操纵默认InitialSessionState
,等到相关的RunspaceFactory.CreateRunspace()
打开,然后根据需要使用PSModulePath
/ {获取/设置变量{1}}。
Runspace
通过访问当前SessionStateProxy.GetVariable()
实例的SetVariable()
属性,可以实现相同的效果。这种方法消除了显式创建和打开using (var runspace = RunspaceFactory.CreateRunspace())
{
runspace.Open();
var proxy = runspace.SessionStateProxy;
var psModulePath = proxy.GetVariable("env:PSModulePath");
proxy.SetVariable("env:PSModulePath", $"{psModulePath};{extraPathToAppend}");
using (var powershell = PowerShell.Create())
{
powershell.Runspace = runspace;
powershell
.AddScript(script)
.Invoke();
}
}
实例的需要。
PowerShell
感谢问题Adjust PSModulePath via Runspace in .Net code帮助我解决这个问题!