0

Active Directory に関連するあらゆる種類のシェル コマンドや、特定のドメイン コントローラでその他のシェル コマンドを実行するモジュールを作成しています。

一部のコマンドは機能していますが、一部のコマンドが正しく機能していません。

ここにコードがあります

public static void ExecuteShellCommand(string _FileToExecute, string _CommandLine, ref string _outputMessage, ref string _errorMessage)
{
    System.Diagnostics.Process _Process = null;

    try
    {
       _Process = new System.Diagnostics.Process();

       string _CMDProcess = string.Format(System.Globalization.CultureInfo.InvariantCulture, @"{0}\cmd.exe", new object[] { Environment.SystemDirectory });

       string _Arguments = string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}", new object[] { _FileToExecute });

       _Arguments = string.Format(" /C \"{0}\"", _Arguments);
       Console.WriteLine("---aruguments quering : cmd.exe" + _Arguments);                
       System.Diagnostics.ProcessStartInfo _ProcessStartInfo = new System.Diagnostics.ProcessStartInfo(_CMDProcess, _Arguments);               
       _ProcessStartInfo.CreateNoWindow = true;                
       _ProcessStartInfo.UseShellExecute = false;                
       _ProcessStartInfo.RedirectStandardOutput = true;
       _ProcessStartInfo.RedirectStandardInput = true;
       _ProcessStartInfo.RedirectStandardError = true;
       _Process.StartInfo = _ProcessStartInfo;
       //_ProcessStartInfo.Domain = System.DirectoryServices.ActiveDirectory.Domain.GetCurrentDomain().Name;

       _Process.Start();

       _errorMessage = _Process.StandardError.ReadToEnd();
       _Process.WaitForExit();

       _outputMessage = _Process.StandardOutput.ReadToEnd();
       _Process.WaitForExit();
    }
    catch (Exception _Exception)
    {                
        Console.WriteLine("Exception caught in process: {0}", _Exception.ToString());
    }
    finally
    {
       _Process.Close();
       _Process.Dispose();
       _Process = null;
    }
}

CommandExecutionEngine.ExecuteShellCommand("nltest", "/logon_query /server:india.cobra.net", ref output, ref error);
Console.WriteLine("output for dir : " + output + " error : " + error);

コマンド:

repadmin /showrepl

dcdiag

dcdiag /s:<dcname

コマンド nltest は実行されていますが、結果は返されません。エラーを与える他の言及されたコマンドが内部または外部コマンドとして認識されない場合。コンソールから直接コマンドを実行すると、正常に動作します。

ここでは、権限の問題が発生しないように、ドメイン管理者アカウントのコンテキストでプロセスを呼び出しています。

提案してください。

4

1 に答える 1

0

UseShellExecute = false であるため、アプリケーションの場所が見つからない可能性があります。フルパスを使用してください。

于 2012-10-01T21:41:41.797 に答える