Как выполнить команду на удаленном компьютере? - PullRequest
20 голосов
/ 09 января 2009

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

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

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

Ответы [ 5 ]

32 голосов
/ 02 мая 2012

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

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

Пример кода

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. Вам может потребоваться перезагрузить службу или весь компьютер.

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

6 голосов
/ 09 января 2009

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

0 голосов
/ 02 февраля 2010
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;
}
0 голосов
/ 09 января 2009

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

execcmd \\yourremoteserver <your command here>

Не проще, чем это:)

0 голосов
/ 09 января 2009

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

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

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

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

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

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


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

PsExec \\yourServerName -u yourUserName cmd.exe

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

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

...