C # запуск пакетного файла на удаленном компьютере после запуска PsExec

#c# #file #batch-file #psexec

#c# #файл #пакетный файл #psexec

Вопрос:

В принципе, я пытаюсь запустить пакетный файл, который был скопирован на удаленном компьютере, кстати, это моя первая попытка кодирования, поэтому, пожалуйста, будьте любезны, но критикуйте это, если хотите, я все еще изучаю язык, и мне пришлось потратить 3 часа, чтобы продвинуться так далеко, слава богу, Google, ЛОЛ.

Код:

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void cleanerBtn_Click(object sender, EventArgs e)
        {
            //Copying Batch File to Remote Host
            string fileToCopy = "C:\Clean.bat";
            string newLocation = hostName.Text;
            string newFile = (newLocation   "\clean.bat");

            System.IO.File.Copy(fileToCopy, newLocation);

            //Run PsExec
            string psExec = "psexec -s " newLocation " cmd";
            System.Diagnostics.Process.Start("CMD.exe", psExec);

            //Run Batch File using PsExec


            //Removing Batch File from Remote Host
            System.IO.File.Delete(newFile);

        }

    }
}
  

Заранее спасибо.

Комментарии:

1. 1 за хорошее отношение. Хотел бы я знать psexec, чтобы я мог вам помочь.

2.Предложение по стилю: вы могли бы добавить using SystemDiagnostics; и using System.IO; вверху и просто использовать Process.Start("CMD.exe", psExec); , File.Copy(fileToCopy, newLocation); File.Delete(newFile); впоследствии.

Ответ №1:

Из справки PsExec:

-c Скопируйте указанную программу в удаленную систему для выполнения. Если вы опустите этот параметр, приложение должно находиться в системном пути в удаленной системе.

Используйте этот флаг, чтобы заставить PsExec скопировать пакетный файл, который вы хотите выполнить, в удаленную систему и запустить его. Для этого вам не нужно писать дополнительный код.

В принципе, вы хотите сделать:

 psexec \server cmd.exe /c file_you_want_to_run.bat
  

Комментарии:

1. Это правильно. Возможно, вам придется использовать флаги имени пользователя / пароля psexec, но вам не нужно писать какой-либо собственный код, чтобы это произошло.

Ответ №2:

Попробуйте запустить CMD.exe с помощью /C. Из cmd.exe справка:

/C Выполняет команду, указанную в строке, а затем завершает

К содержимому PsExec необходимо добавить /C:

 System.Diagnostics.Process.Start("CMD.exe", "/C "   psExec);
  

Я полагаю, что тогда вы получите ожидаемые результаты. Если нет, вы можете захотеть убедиться, что psexec.exe находится в каталоге, который указан в переменной окружения PATH.

Кроме того, вам может быть интересно заглянуть в ProcessStartInfo, чтобы указать другие параметры, которые можно установить для выполнения процесса.

Комментарии:

1. я действительно ценю все ваши ответы на вопрос, что касается части \ запустить пакетный файл с использованием psexec, как мне заставить его выполнить пакетный файл, который был скопирован на удаленный компьютер (строковое имя хоста)?

2. Я не думаю, что вы можете выполнить код на внешнем компьютере. Вы можете запустить пакетный файл с сетевого компьютера на вашем, но не наоборот. Это было бы серьезным недостатком безопасности.