Exécuter des commandes Unix en utilisant PuTTY en C #

J’essaie d’exécuter des commandes Unix dans PuTTY en utilisant C #. J’ai le code ci-dessous. Mais le code ne fonctionne pas. Je ne suis pas capable d’ouvrir PuTTY.

static void Main(ssortingng[] args) { Process cmd = new Process(); cmd.StartInfo.FileName = @"C:\Windows\System32\cmd"; cmd.StartInfo.UseShellExecute = false; cmd.StartInfo.RedirectStandardInput = false; cmd.StartInfo.RedirectStandardOutput = true; cmd.Start(); cmd.StartInfo.Arguments = "C:\Users\win7\Desktop\putty.exe -ssh [email protected] 22 -pw mahi"; } 

  • Le putty.exe est une application graphique. Il est destiné à une utilisation interactive, pas à l’automatisation. Inutile d’essayer de redirect sa sortie standard, car il ne l’utilise pas.

  • Pour l’automatisation, utilisez un autre outil du package PuTTY, le plink.exe .
    C’est une application console, vous pouvez donc redirect sa sortie / entrée standard.

  • Il ne sert à rien d’essayer d’exécuter une application indirectement via le cmd.exe . Exécutez-le directement.

  • Vous devez également redirect l’entrée standard pour pouvoir envoyer des commandes à Plink.

  • Vous devez fournir des arguments avant d’appeler le .Start() .

  • Vous voudrez peut-être aussi redirect la sortie d’erreur ( RedirectStandardError ). Notez que vous aurez besoin de lire la sortie et la sortie d’erreur en parallèle, ce qui complique le code.


 static void Main(ssortingng[] args) { Process cmd = new Process(); cmd.StartInfo.FileName = @"C:\Program Files (x86)\PuTTY\plink.exe"; cmd.StartInfo.UseShellExecute = false; cmd.StartInfo.RedirectStandardInput = true; cmd.StartInfo.RedirectStandardOutput = true; cmd.StartInfo.Arguments = "-ssh [email protected] 22 -pw mahi"; cmd.Start(); cmd.StandardInput.WriteLine("./myscript.sh"); cmd.StandardInput.WriteLine("exit"); ssortingng output = cmd.StandardOutput.ReadToEnd(); } 

Cela devrait fonctionner:

  static void Main(ssortingng[] args) { ProcessStartInfo cmd = new ProcessStartInfo(); cmd.FileName = @"C:\Users\win7\Desktop\putty.exe"; cmd.UseShellExecute = false; cmd.RedirectStandardInput = false; cmd.RedirectStandardOutput = true; cmd.Arguments = "-ssh [email protected] 22 -pw mahi"; using (Process process = Process.Start(cmd)) { process.WaitForExit(); } }