2016-12-12 16 views
0

私はリモートPCにプッシュアウトしてPsExecを使用して実行する動的に生成されたバッチファイルを持っています。私が直面している問題は、その行が呼び出されるとすぐに、PowerShellスクリプトが動いて終了するのを待たないということです。このファイルには、動的に生成されるPsExecがPowerShellでcmd/cを終了するのを待ちます。

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

理想的には、私はスポーンされたプロセスによって返された終了コードを取得したいと思いますが、それはあまりにも多いかもしれません。以前、私はあなたが後にしている待って達成するために、このようなものを使用している

+0

してください[フォーマットあなたのコードをきちんと]回答(http://meta.stackexchange.com/a/22189/248777)。 – mklement0

+0

質問を編集して、 'psexec'コマンドラインを起動するためのPowerShellコードを表示してください。 – mklement0

答えて

2

:あなたは上記の行に焦点を当てる必要がありますどのような

Start-Process -FilePath 'c:\tools\PSexec.exe' -ArgumentList "-u MyUserName -p $password \\$Computer .\Run.bat $Var >> C:\Temp\$Computer.log" -Wait -Passthru -WindowStyle Hidden 

たちは
-Waitパラメータを使用することができますStart-Processコマンドレットを使用することです。

ホープこれはあなたの質問

0
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);    
} 
関連する問題