等待 PsExec 调用 cmd /c 在 PowerShell 中完成
Wait for PsExec calling cmd /c to finish in PowerShell
我有一个动态生成的批处理文件,我将其推送到远程 PC,然后使用 PsExec 执行它。我面临的问题是,一旦调用该行,PowerShell 脚本就会继续运行并且不会等待它完成。这是我拥有的:
psexec -accepteula \$Server -u Username -p Password-d -i 2 cmd /c C:\Call.bat
Call.bat
使用传入的几个参数调用远程机器上的可执行文件。该文件是动态生成的,每次都不一样,但可以如下所示:
cd C:161212-175524
C:161212-175524\RE.exe /pa1 /pa2 /pa3 /pa4 /pa5 /pa6 /pa7 /pa8 /pa9 /pa10
批处理文件需要 运行 作为特定用户的交互式脚本,但我需要它至少等待生成的进程完成。我尝试添加 2>&1
和 | Out-Null
理想情况下,我想检索派生进程返回的退出代码,但这可能太多了。
以前我用过类似的东西来实现你想要的等待:
Start-Process -FilePath 'c:\tools\PSexec.exe' -ArgumentList "-u MyUserName -p $password \$Computer .\Run.bat $Var >> C:\Temp$Computer.log" -Wait -Passthru -WindowStyle Hidden
你需要关注上面一行的是使用 Start-Process
cmdlet 我们可以使用
-Wait
参数。
希望这能回答您的问题
private static string ExecuteAndGetOutput(string command)
{
string resultFile = Path.GetTempFileName();
string commandFile = Path.Combine(Path.GetTempPath(), Path.GetFileNameWithoutExtension(resultFile) + ".bat");
command += @" >""{0}""";
command = string.Format(command, resultFile);
File.WriteAllText(commandFile, command);
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = commandFile;
psi.WindowStyle = ProcessWindowStyle.Hidden;
Process p = Process.Start(psi);
p.WaitForExit();
int exitCode = p.ExitCode;
return File.ReadAllText(resultFile);
}
我有一个动态生成的批处理文件,我将其推送到远程 PC,然后使用 PsExec 执行它。我面临的问题是,一旦调用该行,PowerShell 脚本就会继续运行并且不会等待它完成。这是我拥有的:
psexec -accepteula \$Server -u Username -p Password-d -i 2 cmd /c C:\Call.bat
Call.bat
使用传入的几个参数调用远程机器上的可执行文件。该文件是动态生成的,每次都不一样,但可以如下所示:
cd C:161212-175524
C:161212-175524\RE.exe /pa1 /pa2 /pa3 /pa4 /pa5 /pa6 /pa7 /pa8 /pa9 /pa10
批处理文件需要 运行 作为特定用户的交互式脚本,但我需要它至少等待生成的进程完成。我尝试添加 2>&1
和 | Out-Null
理想情况下,我想检索派生进程返回的退出代码,但这可能太多了。
以前我用过类似的东西来实现你想要的等待:
Start-Process -FilePath 'c:\tools\PSexec.exe' -ArgumentList "-u MyUserName -p $password \$Computer .\Run.bat $Var >> C:\Temp$Computer.log" -Wait -Passthru -WindowStyle Hidden
你需要关注上面一行的是使用 Start-Process
cmdlet 我们可以使用 -Wait
参数。
希望这能回答您的问题
private static string ExecuteAndGetOutput(string command)
{
string resultFile = Path.GetTempFileName();
string commandFile = Path.Combine(Path.GetTempPath(), Path.GetFileNameWithoutExtension(resultFile) + ".bat");
command += @" >""{0}""";
command = string.Format(command, resultFile);
File.WriteAllText(commandFile, command);
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = commandFile;
psi.WindowStyle = ProcessWindowStyle.Hidden;
Process p = Process.Start(psi);
p.WaitForExit();
int exitCode = p.ExitCode;
return File.ReadAllText(resultFile);
}