想象一下,一个DOS的风格。cmd文件,该文件是用来启动相互依存的窗口的应用程序正确的顺序。

例如:
1)启动一个服务器应用程序通过调exe与参数。
2)在等待服务器成为初始化(或固定金额的时间)。
3)发射客户应用程序通过调exe与参数。

什么是最简单的方式完成这种批工作PowerShell?

有帮助吗?

解决方案

记住,PowerShell可以访问。净的对象。开始-睡觉的建议 布莱尔康拉德 可以替换为一个呼叫 WaitForInputIdle 服务器进程的所以你知道当的服务器准备开始之前的客户。

$sp = get-process server-application
$sp.WaitForInputIdle()

你也可以使用 过程。开始 启动进程,并让它返回的确切过程。然后你不需要得到处理。

$sp = [diagnostics.process]::start("server-application", "params")
$sp.WaitForInputIdle()
$cp = [diagnostics.process]::start("client-application", "params")

其他提示

@拉斯Truijens建议

记住,PowerShell可以访问 .净的对象。开始-睡 建议通过布莱尔康拉德可以 替换由一个叫WaitForInputIdle 服务器进程的所以你知道什么时候 服务器准备开始之前 客户。

这是多优雅的比沉睡于一个固定的(或者通过提供参数)的时间量。但是, WaitForInputIdle

仅适用于对过程的用户 接口,因此,一个消息 循环。

因此,这可能不起作用,取决于特性的发射服务器应用程序。然而,作为拉尔斯向我指出,这个问题提到了一个 窗口 应用程序(这我错过了,当我读到的问题),因此他的解决方案可能是最好的。

等到10秒之间启动的应用程序,尝试

launch-server-application serverparam1 serverparam2 ...
Start-Sleep -s 10
launch-client-application clientparam1 clientparam2 clientparam3 ...

如果你想要建立一个脚本和具有参数的通过,创建一个文件叫runlinkedapps.ps1(或者)与这些内容:

launch-server-application $args[0] $args[1]
Start-Sleep -s 10
launch-client-application $args[2] $args[3] $args[4]

但是你选择的分发服务器和客户的参数上线路用于运行runlinkedapps.ps1。如果你想,你甚至可以通过在延时这里,而不是硬编码 10.

记住,你的.ps1文件需要你的道路上,或者只须指定其位置。(哦,我已经假定发射服务器应用和启动的客户的应用程序都是在你的道路--如果不是,则需要以全路径指定他们。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top