Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
等待PsExec在PowerShell中调用cmd/c完成_Powershell_Return Value_Psexec - Fatal编程技术网

等待PsExec在PowerShell中调用cmd/c完成

等待PsExec在PowerShell中调用cmd/c完成,powershell,return-value,psexec,Powershell,Return Value,Psexec,我有一个动态生成的批处理文件,我将其推送到远程PC,然后使用PsExec执行它。我面临的问题是,只要调用该行,PowerShell脚本就会继续运行,不会等待它完成。以下是我所拥有的: psexec -accepteula \\$Server -u Username -p Password-d -i 2 cmd /c C:\Call.bat Call.bat通过传入一些参数调用远程计算机上的可执行文件。此文件是动态生成的,每次都不同,但可以如下所示: cd C:\20161212-175524

我有一个动态生成的批处理文件,我将其推送到远程PC,然后使用PsExec执行它。我面临的问题是,只要调用该行,PowerShell脚本就会继续运行,不会等待它完成。以下是我所拥有的:

psexec -accepteula \\$Server -u Username -p Password-d -i 2 cmd /c C:\Call.bat
Call.bat
通过传入一些参数调用远程计算机上的可执行文件。此文件是动态生成的,每次都不同,但可以如下所示:

cd C:\20161212-175524
C:\20161212-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
参数


希望这能回答您的问题。请编辑问题以显示用于调用
psexec
命令行的PowerShell代码。语言错误^^
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);            
}