Как получить значение переменной среды из удаленного кода powershell C#? - PullRequest
0 голосов
/ 10 апреля 2020

Я подключаюсь к удаленной машине через 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();
    }
}

Однако это не работает. Я получаю исключение Specified method is not supported ... Продолжая сверление, я вижу, что SessionStateProxy имеет свойства, которые не инициированы из-за PSNotSupportedException:

enter image description here

Глядя на код powershell, это тоже имеет смысл: https://github.com/PowerShell/PowerShell/blob/b1e998046e12ebe5da9dee479f20d479aa2256d7/src/System.Management.Automation/engine/remoting/client/remoterunspace.cs#L3310

Итак, как мне получить значение переменной среды с помощью C# удаленного кода powershell, БЕЗ простого запуска удаленный сценарий для вывода значения или что-то (что я не хочу делать, поскольку это не правильно)?

1 Ответ

0 голосов
/ 10 апреля 2020

Если вам нужен полный список переменных среды на целевой машине или только одна из них, используйте следующий код:

using (var psShell = PowerShell.Create())
{
    // Set up remote connection code

    // Empty means that you will get all environment variables on target machine. 
    // You can use specific environment variable name to get only one.
    var environmentVariableName = string.Empty; 

    psShell.AddCommand("Get-ChildItem")
           .AddParameter("Path", $"Env:\\{environmentVariableName}");

    var environmentVariablesDictionary = psShell.Invoke<DictionaryEntry>(); // Here will be dictionary of environment variables.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...