サーバーに共有フォルダーがあり、いくつかのファイルでコマンドをリモートで実行する必要があります。それ、どうやったら出来るの?
それを機能させるには、サーバー上でどのサービスを実行する必要がありますか?
詳細:C#のみを使用できます。サーバーには何もインストールできません。
別の解決策は、 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 Config
を展開します8BC3F05E-D86B-11D0-A075-00C04FB68820
(これは詳細ビューで確認できます)で識別されるWindows管理手順を見つけます。注:リモートプロセスに使用されるすべてのパスは、ターゲットマシンに対してローカルである必要があります。
SysInternalの PsExec を使用できます。
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;
}
IMO、あなたの場合、これを試すことができます:
- 共有フォルダーをコンピューターのドライブまたはフォルダーにマップします。 ( 方法はこちら )
- 通常はローカルファイルと同じように、マップされたドライブ/フォルダーにアクセスします。
何もインストールする必要はありません。フォルダー共有を有効にするサービスを除き、サービスを実行する必要はありません。
共有フォルダーにアクセスしてコンピューターにマップできる場合、コマンドプロンプトやすべてのエクスプローラー強化ツールなど、ほとんどのものはローカルファイルのように機能するはずです。
これはPsExec(またはRDP-ing in)の使用とは異なり、リモートサーバーで管理者権限および/またはリモートデスクトップ/ターミナルサービス接続権限を持っている必要はなく、それらの共有フォルダーにアクセスできればよいだけです。
また、これらの共有フォルダーで実行するコマンド/ツールを実行するために必要なすべてのセキュリティ権限があることを確認してください。
ただし、処理をターゲットマシンで()実行する場合は、 PsExec as @divo and @再帰的指摘、何かに沿って:
PsExec \\yourServerName -u yourUserName cmd.exe
これにより、リモートマシンでコマンドプロンプトatが表示されます。そして、そこから好きなものを実行できます。
確かではありませんが、サーバー(lanmanserver
)またはターミナルサービス(TermService
)サービスのいずれかが実行されている必要があります(既に実行されているはずです)。