2016-12-12 21 views
0

我有一個動態生成的批處理文件,我推送到遠程PC,然後使用PsExec執行它。我面臨的問題是,只要調用該行,PowerShell腳本就會繼續,並且不會等待它完成。以下是我有:等待PsExec調用cmd/c在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

理想情況下,我想檢索衍生進程返回的退出代碼,但這可能太多了。

+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 

你需要把重點放在上面的線什麼是使用Start-Process cmdlet的我們可以使用
-Wait參數。

希望這回答你的問題

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);    
}