14

これは、ユーザーが作成したコマンド プロンプトから実行した場合に正常に機能するコマンドです。

PSEXEC \\xxx.xxx.xxx.xxx -u xxxx -p xxxx -accepteula cmd /c "TYPE C:\Pyxislog\PYXIS01.log|Find/i "%ID%"" >nul

ただし、システム起動の cmd プロンプトからこれを実行しようとすると、次のようになります。

Couldn't access 10.219.149.65:
The handle is invalid.
Connecting to 10.219.149.65...

これは、システム ユーザーとして実行されるリモート ソフトウェア ツールを介して展開されるため、システム ユーザーとして実行する必要があります。これは psexec の制限ですか? はい、ユーザー名とパスワードには管理者権限があります。

4

6 に答える 6

2

Psexec は、-sパラメーターを追加することにより、システム ユーザー アカウントを使用することを強制します。

psexec を使用してリモート コンピューターでタスクを起動すると、データベース テーブルにログが記録されます。-s パラメータを使用しない場合、ユーザーは domain\administrator として表示されますが、-s パラメータを使用すると、「System」として表示されます。

無効なハンドル メッセージについては、これを確認してください。

https://superuser.com/questions/200938/psexec-the-handle-is-invalid

于 2012-12-01T20:01:10.827 に答える
0

私のコードは完璧に動作します:

public static void RunTask(string[] task, string username, string password)
{
    System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(task[1] + ".exe");
    psi.RedirectStandardOutput = true;
    psi.RedirectStandardError = true;
    psi.CreateNoWindow = true;
    psi.UseShellExecute = false;
    string args = String.Format(@"-u {1} -p {2} -accepteula \\{0} " + (task[1] == "psexec" ? "-d -s -i 2 {3}" : "{3}"), task[0], username, password, task[1] == "psservice" ? task[2].TrimStart('"').Insert(task[2].IndexOf(' '), "\"") : task[2]);
    psi.Arguments = args;

    System.Diagnostics.Process prc = System.Diagnostics.Process.Start(psi);
    string output = (prc.StandardError.ReadToEnd() + "\r\n" + prc.StandardOutput.ReadToEnd()).Trim();
    output = output.Substring(output.IndexOf(".com\r\n\r\n") + 8);

    prc.WaitForExit();

    if (!(output.Contains("started on") || output.Contains("killed on") || output.Contains("SERVICE_NAME"))) throw new Exception(output);
}

サンプル呼び出し:

    RunTask(new string[] { "MACHINE", "psexec", @"""C:\Program Files (x86)\Internet Explorer\iexplore.exe""" }, "USERNAME", "PASSWORD");
    RunTask(new string[] { "MACHINE", "pskill", @"""iexplore.exe""" }, "USERNAME", "PASSWORD");
    RunTask(new string[] { "MACHINE", "psservice", @"""start SOMESERVICE""" }, "USERNAME", "PASSWORD");
    RunTask(new string[] { "MACHINE", "psservice", @"""stop SOMESERVICE""" }, "USERNAME", "PASSWORD");
  • プログラムの横にpsexec.exepskill.exe、およびpsservice.exeがあることを確認してください。
于 2019-10-30T09:22:08.877 に答える