c # Core System.Management.Automation ошибка удаленного подключения - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь написать C # core программу для запуска сценариев powershell в удаленных системах Linux. Работа на ядре .net является обязательным требованием для этого проекта. Я пытаюсь следовать указаниям, которые я нашел на CodeProject .

Это мой код:

using System;
using System.Management.Automation;
using System.Management.Automation.Runspaces;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {

            SSHConnectionInfo connectionInfo = new SSHConnectionInfo(userName: "user", computerName: "server", keyFilePath: "id_rsa");


            using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo))
            {
                runspace.Open(); // The program errors out here
                runspace.Close();

            }

        }
    }
}

У меня есть файл "id_rsa", расположенный в той же папке, что и программа. Я проверил, что openssh для windows, powershell core 6.0.2 и .net core 2 SDK установлены и работают. Я использую следующие пакеты nuget из Microsoft Powershell Core : Microsoft.PowerShell.SDK (6.0.2) и Sytem.Managment.Automation (6.0.2)

Это ошибка, которую я получаю:

Unhandled Exception: System.Management.Automation.Remoting.PSRemotingDataStructureException: An error has occurred which PowerShell cannot handle. A remote session might have ended. ---> System.ArgumentException: The path is not of a legal form.
Parameter name: path
   at System.IO.Path.GetDirectoryName(String path)
   at System.Management.Automation.Runspaces.SSHConnectionInfo.StartSSHProcess(StreamWriter& stdInWriterVar, StreamReader& stdOutReaderVar, StreamReader& stdErrReaderVar)
   at System.Management.Automation.Remoting.Client.SSHClientSessionTransportManager.CreateAsync()
   at System.Management.Automation.Remoting.ClientRemoteSessionDSHandlerImpl.SendNegotiationAsync(RemoteSessionState sessionState)
   at System.Management.Automation.Remoting.ClientRemoteSessionDSHandlerImpl.HandleStateChanged(Object sender, RemoteSessionStateEventArgs arg)
   at System.Management.Automation.ExtensionMethods.SafeInvoke[T](EventHandler`1 eventHandler, Object sender, T eventArgs)
   at System.Management.Automation.Remoting.ClientRemoteSessionDSHandlerStateMachine.RaiseStateMachineEvents()
   at System.Management.Automation.Remoting.ClientRemoteSessionDSHandlerStateMachine.ProcessEvents()
   --- End of inner exception stack trace ---
   at System.Management.Automation.Runspaces.AsyncResult.EndInvoke()
   at System.Management.Automation.Runspaces.Internal.RunspacePoolInternal.EndOpen(IAsyncResult asyncResult)
   at System.Management.Automation.Runspaces.Internal.RemoteRunspacePoolInternal.Open()
   at System.Management.Automation.RemoteRunspace.Open()
   at ConsoleApp1.Program.Main(String[] args) in C:\ConsoleApp1\ConsoleApp1\Program.cs:line 18
Press any key to continue . . .

На данный момент я не уверен, что мне не хватает.

1 Ответ

0 голосов
/ 12 сентября 2018

Я закончил тем, что открыл для этой ошибки проблему на github. Чтобы обойти эту проблему в настоящее время, вам нужно будет добавить следующий код в вашу программу, пока эта проблема не будет решена в будущей версии ядра powershell (> 6.0.4 или> 6.1.0-rc.1) , Вот конкретный пост, касающийся вопроса.

if (System.Management.Automation.Runspaces.Runspace.DefaultRunspace == null)
{
    var defaultRunspace = RunspaceFactory.CreateRunspace();
    defaultRunspace.Open();
    System.Management.Automation.Runspaces.Runspace.DefaultRunspace = defaultRunspace;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...