执行CMD命令并将Stream CMD结果传递给StreamWriter

时间:2016-03-07 02:02:04

标签: powershell streamwriter powershell-v1.0

我正在尝试执行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 个答案:

答案 0 :(得分:0)

  1. 不要混用CMD和PowerShell。使用其中一个。我已经告诉过你last time
  2. 不再使用PowerShell v1。任何仍受支持的Windows系统至少可以运行PowerShell v2。立即升级。
  3. 您不需要CMD来从PowerShell运行可执行文件。我也告诉过你。
  4. 如果您将命令行放在引号中,PowerShell将简单地回显它,而不是执行它。
  5. 要过滤通配符匹配,请使用-like运算符。
  6. 流编写者无法从管道中读取。您需要将它们包装在ForEach-Object语句中。
  7. $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()