サーバーに共有フォルダーがあり、いくつかのファイルに対してリモートでコマンドを実行する必要があります。それ、どうやったら出来るの?
それを機能させるには、サーバー上でどのサービスを実行する必要がありますか?
詳細: C# のみ使用できます。サーバーには何もインストールできません。
もう 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 構成を確認してください。
dcomcnfg、コマンド プロンプトから実行します。 Component Services\Computers\My Computer\DCOM Config8BC3F05E-D86B-11D0-A075-00C04FB68820(これは詳細ビューで確認できます)。注:リモート プロセスに使用されるすべてのパスは、ターゲット マシンに対してローカルである必要があります。
SysInternalのPsExecを使用できます。
IMO、あなたの場合、あなたはこれを試すことができます:
- 共有フォルダーをマシン上のドライブまたはフォルダーにマップします。(方法は次のとおりです)
- 通常のローカルファイルと同じように、マップされたドライブ/フォルダにアクセスします。
何もインストールする必要はありません。フォルダ共有を有効にするサービスを除いて、サービスを実行する必要はありません。
共有フォルダーにアクセスしてマシンにマップできる場合は、コマンドプロンプトやすべてのエクスプローラー拡張ツールなど、ほとんどのものがローカルファイルと同じように機能するはずです。
これは、リモートサーバーで管理者権限やリモートデスクトップ/ターミナルサービス接続権限を持っている必要がなく、それらの共有フォルダーにアクセスできる必要があるという点で、PsExec(またはRDP-ing in)を使用する場合とは異なります。
また、これらの共有フォルダで実行するコマンド/ツールを実行するために必要なすべてのセキュリティ権限があることを確認してください。
ただし、ターゲットマシンで処理を実行したい場合は、@divoおよび@recursiveが指摘したようにPsExecを試すことができます。
PsExec \\yourServerName -u yourUserName cmd.exe
これにより、リモートマシンでコマンドプロンプトが表示されます。そしてそこから、あなたはあなたが望むものを何でも実行することができます。
lanmanserverよくわかりませんが、サーバー( )またはターミナルサービス( )サービスを実行する必要があると思います(TermServiceすでに実行されているはずです)。
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;
}
PureMPI.netに付属している。という小さなユーティリティを使用しますexeccmd.exe。その構文は次のとおりです。
execcmd \\yourremoteserver <your command here>
これよりも単純なものはありません:)