Подтвердить что ты не робот

Как выполнить команду на удаленном компьютере?

У меня есть общая папка на сервере, и мне нужно удаленно выполнить команду для некоторых файлов. Как мне это сделать?

Какие службы должны выполняться на сервере, чтобы сделать эту работу?

Некоторые детали: Можно использовать только С#. На сервере ничего не может быть установлено.

4b9b3361

Ответ 1

Другое решение - использовать WMI.NET или инструментарий управления Windows.

Используя пространство имен .NET Framework System.Management, вы можете автоматизировать административные задачи с помощью инструментария управления Windows (WMI).

Пример кода

using System.Management;
...
var processToRun = new[] { "notepad.exe" };
var connection = new ConnectionOptions();
connection.Username = "username";
connection.Password = "password";
var wmiScope = new ManagementScope(String.Format("\\\\{0}\\root\\cimv2", REMOTE_COMPUTER_NAME), connection);
var wmiProcess = new ManagementClass(wmiScope, new ManagementPath("Win32_Process"), new ObjectGetOptions());
wmiProcess.InvokeMethod("Create", processToRun);

Если у вас проблемы с аутентификацией, проверьте конфигурацию DCOM.

  1. На целевом компьютере запустите dcomcnfg из командной строки.
  2. Разверните Component Services\Computers\My Computer\DCOM Config
  3. Найдите инструкцию по управлению Windows, идентифицированную с помощью GUID 8BC3F05E-D86B-11D0-A075-00C04FB68820 (вы можете увидеть это в подробном представлении).
  4. Отредактируйте свойства и затем добавьте имя пользователя, с которым вы пытаетесь войти, на вкладке разрешений.
  5. Вам может потребоваться перезагрузить службу или весь компьютер.

ПРИМЕЧАНИЕ. Все пути, используемые для удаленного процесса, должны быть локальными по отношению к целевому компьютеру.

Ответ 2

Вы можете использовать SysInternal PsExec.

Ответ 3

ИМО, в вашем случае вы можете попробовать следующее:

  • Сопоставьте общую папку с диском или папкой на вашем компьютере. (здесь как)
  • Доступ к сопоставленному диску/папке, как обычно, локальным файлам.

Ничего не нужно устанавливать. Не нужно запускать службы, кроме тех, которые разрешают совместное использование папок.

Если вы можете получить доступ к общей папке и отобразить ее на своем компьютере, большинство вещей должно работать так же, как и локальные файлы, включая командные строки и все инструменты для улучшения проводника.

Это отличается от использования PsExec (или RDP-in) в том, что вам не нужно иметь права администратора и/или права на подключение к удаленному рабочему столу/терминалу на удаленном сервере, вам просто нужно иметь доступ к этим общие папки.

Также убедитесь, что у вас есть все необходимые разрешения безопасности для запуска любых команд/инструментов, которые вы хотите запустить в этих общих папках.


Если, однако, вы хотите, чтобы обработка выполнялась на целевой машине, вы можете попробовать PsExec как @divo и @recursive point, что-то вместе:

PsExec \\yourServerName -u yourUserName cmd.exe

Что принесет, вы получите командную строку на удаленном компьютере. И оттуда вы можете выполнять все, что хотите.

Я не уверен, но я думаю, вам нужен либо сервер (lanmanserver), либо служба служб терминалов (TermService), которая должна быть запущена (что должно быть уже запущено).

Ответ 4

try
{
    string AppPath = "\\\\spri11U1118\\SampleBatch\\Bin\\";
    string strFilePath = AppPath + "ABCED120D_XXX.bat";
    System.Diagnostics.Process proc = new System.Diagnostics.Process();

    proc.StartInfo.FileName = strFilePath;
    string pwd = "s44erver";

    proc.StartInfo.Domain = "abcd";
    proc.StartInfo.UserName = "sysfaomyulm";

    System.Security.SecureString secret = new System.Security.SecureString();
    foreach (char c in pwd)

        secret.AppendChar(c);

    proc.StartInfo.Password = secret;
    proc.StartInfo.UseShellExecute = false;

    proc.StartInfo.WorkingDirectory = "psexec \\\\spri11U1118\\SampleBatch\\Bin ";

    proc.Start();
    while (!proc.HasExited)
    {
        proc.Refresh();
        // Thread.Sleep(1000);
    }

    proc.Close();
}
catch (Exception ex)
{
    throw ex;
}

Ответ 5

Я использую небольшую утилиту, которая поставляется с PureMPI.net под названием execcmd.exe. Его синтаксис выглядит следующим образом:

execcmd \\yourremoteserver <your command here>

Не получается проще:)