2011-10-28 58 views
1

我在PowerShell中有一個調用LogParser的腳本。早在腳本中,我定義的可執行文件路徑,並測試它的路徑:後來Powershell&operator停止工作

#Define path to log parser executable 
$logParser = '\\hostname\logparser22\LogParser.exe' 
if (! $(Test-Path $logParser)) 
    { 
    Write-Host -ForegroundColor Red "Could not access: $logParser" 
    return 
    } 

然後順着劇本我打電話LOGPARSER的:

$sessionData = & $logParser "SELECT * FROM $logPath where data LIKE `'Contoso\\$user`'" -i:csv -nSkipLines:4 -headers:on -stats:off -o:csv 

這在PowerShell會話期間的工作文件一段時間,但如果運行足夠多的時間,最終會停止工作做一個小的調試一旦我進入了一個破殼,下面甚至不生產不帶參數調用LOGPARSER的時回來正常的幫助:

& $LogParser 

但是,如果我打開運行完全相同的一個新的PowerShell會話命令,它可以工作並調用LogParser,並在不傳遞任何參數時從中獲得標準響應。

我想到的是&被破壞了。有沒有人看過這個,知道一個修復程序\解決方法?

回答

1

或許你可以嘗試使用其他的方式來開始你與小命令外部進程:

$logParser = '\\hostname\logparser22\LogParser.exe' 
$allArgs = ("SELECT * FROM $logPath where data LIKE `'Contoso\\$user`'", "-i:csv", "-nSkipLines:4", "-headers:on", "-stats:off -o:csv") 
$ps = Start-Process -FilePath $logParser -ArgumentList $allargs -Wait -Passthru -NoNewWindow -RedirectStandardOutput $tempoutputfile -RedirectStandardError $temperrorfile; 
$ps.WaitForExit() # block till exe finish 
$ps.ExitCode; 

你應該對錯誤的詳細解釋。

+0

非常感謝這,它拯救了我的屁股。我無法理解,爲什麼從我的PowerShell腳本中調用可執行文件在一段時間後仍然失敗。現在,當我使用'Start-Process'時,所有的工作都很精美! – Vippy

0

這可能與this defect有關PowerShell如何處理大量控制檯輸出的問題,這很容易發生在LogParser中。這應該在PowerShell 3.0中修復。