1

我在 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 确切命令的新 PowerShell 会话,它会工作并调用 LogParser,并且在不传递任何参数时我会从中获得标准响应。

我归结为 & 以某种方式被打破了。有没有人看到这个并知道修复\解决方法?

4

3 回答 3

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;

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

于 2011-10-30T09:18:26.673 回答
1

我有这个确切的问题。如错误报告中所述,Powershell V2 中的解决方法是放入[GC]::Collect()写入控制台的循环中。

&<command>是调用外部的首选方式.exe。有一篇关于如何使用参数设置外部调用的优秀帖子。

于 2015-01-06T14:15:18.630 回答
0

这可能与PowerShell 如何处理大量控制台输出的缺陷有关,LogParser 很容易发生这种情况。这应该在 PowerShell 3.0 中得到修复。

于 2012-03-08T19:19:51.787 回答