Putty - Delete files dynamically using C#

后端 未结 3 1907
渐次进展
渐次进展 2021-01-27 04:55

I am working on a Windows app with C# as a programming langugage.

Requirement is

  1. to login to putty dynamically
  2. delete old files from specific loca
3条回答
  •  迷失自我
    2021-01-27 05:09

    Putty has the command line option -m {script_file} which allows you to specify a script file to be run against the remote server. After all the commands are run, putty will exit.

    You could save the command to be run in a script file, call Putty, and delete the script file when you're done.

    The following code works for me:

    string hostname = "hostname";
    string login = "login";
    string password = "password";
    string command = "rm ~/dir1/dir2/NewFolder/*.txt"; // modify this to suit your needs
    
    const string scriptFileName = @"remote_commands.sh";
    File.WriteAllText(scriptFileName, command);
    
    var startInfo = new ProcessStartInfo();
    startInfo.FileName = @"C:\Putty\putty.exe";
    startInfo.Arguments = string.Format("{0}@{1} -pw {2} -m {3}", 
                                         login, hostname, password, scriptFileName);
    
    var process = new Process {StartInfo = startInfo};
    process.Start();
    process.WaitForExit();
    
    File.Delete(scriptFileName);
    

    If all you want to do is send a single command to the server, this solution will do. If you need more advanced functionality, like reading the server response, you should check out Thomas' answer.

    Edit:

    Here's how to use plink to run commands and get their output:

    string hostname = "hostname";
    string login = "login";
    string password = "password";
    
    var startInfo = new ProcessStartInfo();
    startInfo.FileName = @"C:\Putty\plink.exe";
    startInfo.RedirectStandardInput = true;
    startInfo.RedirectStandardOutput = true;
    startInfo.UseShellExecute = false;
    startInfo.Arguments = string.Format("{0}@{1} -pw {2}",
                                            login, hostname, password);
    
    using (var process = new Process {StartInfo = startInfo})
    {
        process.Start();
    
        process.StandardInput.WriteLine("ls");
        process.StandardInput.WriteLine("echo 'run more commands here...'");
        process.StandardInput.WriteLine("exit"); // make sure we exit at the end
    
        string output = process.StandardOutput.ReadToEnd();
        Console.WriteLine(output);
    }
    

提交回复
热议问题