Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从远程powershell C#代码获取环境变量值?_C#_Powershell - Fatal编程技术网

如何从远程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

我正在通过C#Powershell库连接到一台远程机器,并希望通过C#代码从该机器获取环境变量。通过对其他堆栈溢出线程的搜索,我认为下面的方法可以奏效:

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];
。如果我理解您试图实现的目标。