我正在使用 Visual Studio 2010 开发一个 Windows 控制台应用程序,它会在屏幕上打印进度百分比,以便最后一个数字被当前数字覆盖。我正在使用回车来实现这一点,如下所示:
std::wcout
<< "[Running: "
<< std::setw(3)
<< std::setprecision(3)
<< percent
<< "%]"
<< '\r'
;
当我使用 PSSesion 在远程主机上通过 PowerShell 执行此程序时:
Enter-PSSession WWW.XXX.YYY.ZZZ -credential <UserName>
[WWW.XXX.YYY.ZZZ]: PS C:\> .\test.exe
与在 PowerShell 或 cmd.exe 中本地执行时相比,它的行为有所不同。我面临以下三个问题:
1)程序的控制台输出是不同的,而不是[Running xx%]
像这样覆盖下一行的打印:
[Running 1%]
[Running 2%]
[Running 3%]
[Running 4%]
...
这类似于将程序的输出重定向到文件(单独carriage returns
或newlines
替换为carriage returns
+newlines
组合)时发生的情况。
2)当程序向 cout 写入内容时,输出不会显示。它在执行结束时立即出现。powershell 是否缓存远程程序的输出并仅发送给调用者一次?如果两行之间存在显着的时间差(行表示两个newline
s 之间的所有输出),则打印第一行,就好像它等待另一个时间一样newline
,如果收到,它再次进入等待状态,如果在一定时间内没有收到时间段(~500ms),它将输出直到最后newline
(而不是所有累积的输出)发送给调用者。从我的代码中可以看出,最后一次打印newline
所有内容并没有结果。[Running xx%]
3)在程序的某个时刻,我需要用户的确认,但在远程执行中cin.fail()
返回。true
那么,有没有办法在这样的执行环境中获取用户输入呢?或者有什么方法可以检测到程序正在通过 Powershell 远程执行(例如,一些环境变量)?
任何与任何点相关的帮助将不胜感激。:)