Powershell & оператор перестает работать - PullRequest
1 голос
/ 28 октября 2011

У меня есть скрипт в 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, но если его запустить достаточно раз, он перестанет работать.Выполняя небольшую отладку после того, как я вошел в сломанную оболочку, нижеприведенное не дает даже обычной справки, которая возвращается при вызове LogParser без параметров:

& $LogParser

Однако если я открою новый сеанс PowerShell, запустивЖЕ точная команда, она работает и вызывает LogParser, и я получаю стандартный ответ от нее, когда не передаю никаких параметров.

То, к чему я пришел, так или иначе нарушено.Кто-нибудь видел это и знает об исправлении \ обходном пути?

Ответы [ 3 ]

1 голос
/ 06 января 2015

У меня была именно эта проблема.Как упомянуто в отчете об ошибке , в Powershell V2 можно обойти эту проблему, добавив [GC]::Collect() в цикл, который пишет в консоль.на внешний .exe.Существует отличный пост о , как настроить внешние вызовы с аргументами .

1 голос
/ 30 октября 2011

Возможно, вы можете попробовать использовать другой способ запуска внешнего процесса с помощью командлета:

$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 голосов
/ 08 марта 2012

Это может быть связано с этим дефектом в том, как PowerShell обрабатывает большие объемы консольного вывода, что может легко произойти с LogParser.Это предположительно исправлено в PowerShell 3.0.

...