0

リモート マシンでバッチ ファイルを実行する wmi アプリケーションを作成しました。

このバッチ ファイルは、引数として渡されたディレクトリ文字列に出力を書き込みます。

アプリケーションを起動し、ドライブ C を出力ディレクトリとして選択すると、すべてが機能します。しかし、ネットワーク ドライブを選択すると、何らかの理由で機能しません。

(このネットワーク ドライブは会社のユーザー ドライブであり、ネットワーク上の各ユーザーにマップされます)。

リモートマシン内から手動で(ネットワークドライブを使用して)まったく同じコマンドを実行すると、それも機能します...

ConnectionOptions connOptions = new ConnectionOptions();
connOptions.Impersonation = ImpersonationLevel.Impersonate;
connOptions.Username = sUsername;
connOptions.Password = sPassword;
connOptions.Authority = "NTLMDomain:" + sDomain;
connOptions.EnablePrivileges = true;
ManagementScope manScope = new ManagementScope(String.Format(@"\\{0}\ROOT\CIMV2", sHost), connOptions);
manScope.Connect();
ManagementPath managementPath = new ManagementPath("Win32_Process");
ManagementClass processClass = new ManagementClass(manScope, managementPath, objectGetOptions);
ManagementBaseObject inParams = processClass.GetMethodParameters("Create");

for (int i = 0; i < listOfJobs.Items.Count; i++)
{
   listOfJobs.SetSelected(i, true);
   inParams["CommandLine"] = listOfJobs.SelectedItem.ToString();
   ManagementBaseObject outParams = processClass.InvokeMethod("Create", inParams, null);
}

ジョブ文字列の例:

作業スクリプト: C:\Scripts\BatchScript -p C:\Test C:\OutputDir

失敗したスクリプト: C:\Scripts\BatchScript -p C:\Test U:\OutputDir

何か案は?

4

1 に答える 1

0

ImpersonationLevel を Delegate に設定します。偽装では、1 つのネットワーク ホップのみが許可されます。つまり、サーバーは、ローカルのファイルまたはクライアントにあるファイルにのみアクセスできます。3 番目のマシン (ネットワーク ドライブ) にアクセスするには、別のホップを意味するため、デリゲートが必要です。

于 2013-01-21T16:45:26.267 に答える