#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. Я не думаю, что вы можете выполнить код на внешнем компьютере. Вы можете запустить пакетный файл с сетевого компьютера на вашем, но не наоборот. Это было бы серьезным недостатком безопасности.