2013-04-03 36 views
0

我想標準輸出重定向到.\output\worker01.log和stderr到.\output\worker01-error.log重定向在後臺進程輸出和錯誤的文件在PowerShell中

PS Q:\mles\etl-i_test> .\worker\bin\win32\php.exe -q -c .\worker\conf\php.ini .\worker\bin\os-independant\logfilefilter\logfilefilter.php -f .\worker\worker01\conf\logfilefilter-worker01.xml 2> .\output\worker01-error.log > .\output\worker01.log 

worker01.logworker01-error.log寫入到輸出目錄:如果我運行shell命令它的工作原理。

但是我需要它在PowerShell腳本中的多個後臺進程。可以有n個工作進程,在我的測試用例中有8個工作人員。這就是我所說的:

$strPath = get-location 
$workers = get-childitem -Path worker -Filter worker* 
foreach ($worker in $workers) 
{ 
    Write-Host "Start $worker in background" 

    $block = {& $args[0] $args[1] $args[2] $args[3] $args[4] $args[5] $args[6] $args[7] $args[8] $args[9] $args[10]} 
    start-job -scriptblock $block -argumentlist ` 
    "$strPath\worker\bin\win32\php.exe", ` 
    "-q", ` 
    "-c", ` 
    "$strPath\worker\conf\php_win32.ini", ` 
    "$strPath\worker\bin\os-independant\logfilefilter\logfilefilter.php", ` 
    "-f", ` 
    "$strPath\worker\$worker\conf\logfilefilter-$worker.xml", ` 
    "2>", ` 
    "$strPath\output\$worker-error.log", ` 
    ">", ` 
    "$strPath\output\$worker.log" 
} 

如果我啓動腳本,我可以看到8個PHP和PowerShell進程產卵,這會立即消失。輸出目錄中沒有日誌文件。

回答

1

不要把重定向字符(「>」和「2>」)的參數列表。他們需要在腳本塊中。

$block = {& $args[0] $args[1] $args[2] $args[3] $args[4] $args[5] $args[6] 2> $args[7] > $args[8]} 
    start-job -scriptblock $block -argumentlist ` 
    "$strPath\worker\bin\win32\php.exe", ` 
    "-q", ` 
    "-c", ` 
    "$strPath\worker\conf\php_win32.ini", ` 
    "$strPath\worker\bin\os-independant\logfilefilter\logfilefilter.php", ` 
    "-f", ` 
    "$strPath\worker\$worker\conf\logfilefilter-$worker.xml", ` 
    "$strPath\output\$worker-error.log", ` 
    "$strPath\output\$worker.log" 

它的工作原理是這樣的。

+0

你剛纔回答你自己的問題? –

+1

是的,我做了,因爲我在此期間解決了它。 – mles

相關問題