2016-03-07 3 views
0

Я пытаюсь выполнить команду CMD и передать результаты команд потоку записи. Причиной этого являются файлы журналов, которые я пытаюсь просеять, до 1 гб каждый, и сохранение результатов в переменную может легко использовать несколько гигабайт памяти. Я также хотел бы выпустить StreamWriter из-за прекрасного исполнения.Выполнение команды CMD и результатов Stream CMD для StreamWriter

Вот отрывок из моего сценария.

$StreamWriter = [System.IO.StreamWriter] "test.txt" 
$SearchString = "2016_06_*" 
$SearchLogs = "2016_*.log" 

"CMD /C gunzip.exe -c $SearchLogs |grep -i `"$SearchString`"" | $StreamWriter.WriteLine($_) 

$StreamWriter.Flush() 
$StreamWriter.Close() 
+0

Что именно ваш вопрос? Вы получаете сообщение об ошибке? – RobertKenny

ответ

0
  1. Не следует смешивать CMD и PowerShell. Используйте один или другой. Я уже говорил вам, что last time.
  2. Не используйте PowerShell v1 больше. Любая поддерживаемая система Windows может работать как минимум с PowerShell v2. Обнови сейчас.
  3. Вам не нужен CMD для запуска исполняемых файлов из PowerShell. Я тоже сказал об этом.
  4. Если вы поместите командную строку в кавычки, PowerShell просто повторит ее, а не выполнит ее.
  5. Для фильтрации подстановочных матчей используйте оператор -like.
  6. Потоковые писатели не читают из трубопровода. Вам нужно обернуть их в ForEach-Object.
$StreamWriter = [IO.StreamWriter]'test.txt' 
$SearchString = "2016_06_*" 
$SearchLogs = "2016_*.log" 

gunzip.exe -c $SearchLogs | 
    Where-Object { $_ -like $SearchString } | 
    ForEach-Object { $StreamWriter.WriteLine($_) } 

$StreamWriter.Flush() 
$StreamWriter.Close() 
Смежные вопросы