Powershell&操作员停止工作

时间:2011-10-28 18:43:43

标签: powershell logparser

我在PowerShell中有一个调用LogParser的脚本。在脚本的早期,我定义了可执行文件的路径并测试了它的路径:

#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会话期间工作了一段时间,但如果运行足够多次,它最终会停止工作。在我输入破损的shell后进行一些调试,下面甚至没有产生在没有参数的情况下调用LogParser时返回的正常帮助:

& $LogParser

但是,如果我打开运行SAME exact命令的新PowerShell会话,它会工作并调用LogParser,并且在不传递任何参数时我会从中获得标准响应。

我所得到的是&以某种方式被打破。有没有人看过这个并知道修复工作?

3 个答案:

答案 0 :(得分:1)

也许您可以尝试使用其他方式使用Cmdlet启动外部进程:

$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;

您应该对错误有更多解释。

答案 1 :(得分:1)

我遇到了这个问题。正如bug report中所提到的,Powershell V2中的解决方法是将[GC]::Collect()放入写入控制台的循环中。

&<command>是呼叫外部.exe的首选方式。有一篇关于how to set up your external calls with arguments的优秀文章。

答案 2 :(得分:0)

这可能与PowerShell处理大量控制台输出的this defect有关,这可能很容易发生在LogParser上。这可以在PowerShell 3.0中修复。