25

サーバーに共有フォルダーがあり、いくつかのファイルに対してリモートでコマンドを実行する必要があります。それ、どうやったら出来るの?

それを機能させるには、サーバー上でどのサービスを実行する必要がありますか?

詳細: C# のみ使用できます。サーバーには何もインストールできません。

4

5 に答える 5

37

もう 1 つの解決策は、WMI.NET または Windows Management Instrumentationを使用することです。

.NET Framework 名前空間 System.Management を使用すると、Windows Management Instrumentation (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. GUID で識別される Windows Management Instruction を見つけます8BC3F05E-D86B-11D0-A075-00C04FB68820(これは詳細ビューで確認できます)。
  4. プロパティを編集し、ログインしようとしているユーザー名を権限タブの下に追加します。
  5. サービスまたはマシン全体の再起動が必要になる場合があります。

注:リモート プロセスに使用されるすべてのパスは、ターゲット マシンに対してローカルである必要があります。

于 2012-05-02T12:48:15.153 に答える
8

SysInternalのPsExecを使用できます。

于 2009-01-09T14:56:23.227 に答える
1

IMO、あなたの場合、あなたはこれを試すことができます:

  1. 共有フォルダーをマシン上のドライブまたはフォルダーにマップします。(方法は次のとおりです
  2. 通常のローカルファイルと同じように、マップされたドライブ/フォルダにアクセスします。

何もインストールする必要はありません。フォルダ共有を有効にするサービスを除いて、サービスを実行する必要はありません。

共有フォルダーにアクセスしてマシンにマップできる場合は、コマンドプロンプトやすべてのエクスプローラー拡張ツールなど、ほとんどのものがローカルファイルと同じように機能するはずです。

これは、リモートサーバーで管理者権限やリモートデスクトップ/ターミナルサービス接続権限を持っている必要がなく、それらの共有フォルダーにアクセスできる必要があるという点で、PsExec(またはRDP-ing in)を使用する場合とは異なります。

また、これらの共有フォルダで実行するコマンド/ツールを実行するために必要なすべてのセキュリティ権限があることを確認してください。


ただし、ターゲットマシンで処理を実行したい場合は、@divoおよび@recursiveが指摘したようにPsExecを試すことできます

PsExec \\yourServerName -u yourUserName cmd.exe

これにより、リモートマシンでコマンドプロンプトが表示されます。そしてそこから、あなたはあなたが望むものを何でも実行することができます。

lanmanserverよくわかりませんが、サーバー( )またはターミナルサービス( )サービスを実行する必要があると思います(TermServiceすでに実行されているはずです)。

于 2009-01-09T14:58:42.473 に答える
0
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;
}
于 2010-02-02T11:50:20.143 に答える
-3

PureMPI.netに付属している。という小さなユーティリティを使用しますexeccmd.exe。その構文は次のとおりです。

execcmd \\yourremoteserver <your command here>

これよりも単純なものはありません:)

于 2009-01-09T14:58:50.460 に答える