如何从远程powershell C#代码获取环境变量值?
我正在通过C#Powershell库连接到一台远程机器,并希望通过C#代码从该机器获取环境变量。通过对其他堆栈溢出线程的搜索,我认为下面的方法可以奏效:如何从远程powershell C#代码获取环境变量值?,c#,powershell,C#,Powershell,我正在通过C#Powershell库连接到一台远程机器,并希望通过C#代码从该机器获取环境变量。通过对其他堆栈溢出线程的搜索,我认为下面的方法可以奏效: using (var psShell = PowerShell.Create()) { using (var remoteRunspace = RunspaceFactory.CreateRunspace(CreateSession())) { remoteRunspace.Open(); psS
using (var psShell = PowerShell.Create())
{
using (var remoteRunspace = RunspaceFactory.CreateRunspace(CreateSession()))
{
remoteRunspace.Open();
psShell.Runspace = remoteRunspace;
string userProfilePath = remoteRunspace.SessionStateProxy.PSVariable.GetValue("env:USERPROFILE").ToString();
}
}
但是它不起作用。我得到一个指定的方法不受支持
异常。。。进一步研究,我发现SessionStateProxy
具有由于PSNotSupportedException
而未启动的属性:
看看powershell代码,这也很有意义:
那么,如何通过C#remote powershell代码获取环境变量值,而不只是运行远程脚本来输出值或其他东西(我不想这样做,因为这不是正确的方式)?如果您需要目标计算机上的完整环境变量列表或其中一个,请使用以下代码:
使用(var-psShell=PowerShell.Create())
{
//设置远程连接代码
//空意味着您将获得目标计算机上的所有环境变量。
//您可以使用特定的环境变量名仅获取一个。
var environmentVariableName=string.Empty;
AddCommand(“获取子项”)
.AddParameter(“路径“,$”环境:\\{environmentVariableName}”);
var environmentVariablesDictionary=psShell.Invoke();//这里是环境变量字典。
}
谢谢。有没有一种方法可以让用户创建变量呢?就像我创建这样的变量:psShell.AddScript($testVar='testk2')
,然后将environmentVariableName
设置为testVar
,然后调用上面提到的命令。。如果我这样做,则不会返回testVar
的值:(@Ahmad类似于:environmentVariable=psShell.AddScript($testVar='testk2';$testVar”).Invoke()[0];
。如果我理解您试图实现的目标。