执行CMD命令并将CMD结果流式传输到StreamWriter



我正在尝试执行CMD命令并将命令的结果流式传输到流写入器。原因是我尝试筛选的日志文件每个高达 1gb,将结果存储到变量中很容易耗尽几千兆内存。我也想向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()
  1. 不要混合使用CMD和PowerShell。使用其中之一。我上次已经告诉过你了。
  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()

最新更新