簡體   English   中英

在PowerShell中創建批處理作業

[英]Creating batch jobs in PowerShell

想象一下一個DOS樣式的.cmd文件,該文件用於以正確的順序啟動相互依賴的窗口應用程序。

例:
1)通過調用帶有參數的exe啟動服務器應用程序。
2)等待服務器初始化(或固定時間)。
3)通過調用帶有參數的exe啟動客戶端應用程序。

在PowerShell中完成這種批處理作業的最簡單方法是什么?

請記住,PowerShell可以訪問.Net對象。 Blair Conrad建議的啟動睡眠可以由對服務器進程的WaitForInputIdle的調用來代替 ,這樣您就可以在啟動客戶端之前知道服務器何時就緒。

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

您還可以使用Process.Start啟動該過程,並使其返回確切的Process。 然后,您不需要get-process。

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

@Lars Truijens建議

請記住,PowerShell可以訪問.Net對象。 Blair Conrad建議的啟動睡眠可以由對服務器進程的WaitForInputIdle的調用來代替,這樣您就可以在啟動客戶端之前知道服務器何時就緒。

這比睡眠固定(或通過參數提供)的時間量更優雅。 但是, WaitForInputIdle

僅適用於具有用戶界面的進程,因此適用於消息循環。

因此,根據啟動服務器應用程序的特性,這可能不起作用。 但是,正如Lars向我指出的那樣,該問題涉及一個窗口化的應用程序(當我閱讀該問題時我錯過了),因此他的解決方案可能是最好的。

要在啟動應用程序之間等待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文件必須位於您的Path上,否則您必須在運行它時指定其位置。 (哦,我假設啟動服務器應用程序和啟動客戶端應用程序在您的Path上-如果沒有,則還需要指定它們的完整路徑。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM