2016-03-07 111 views
0

我想执行CMD命令并将流的结果传输到流编写器。原因是我试图筛选的日志文件高达1GB,并将结果存储到一个变量中,可以轻松使用多个内存。由于美丽的表演,我也想出来StreamWriter。执行CMD命令和流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. 您不需要从PowerShell运行可执行文件的CMD。我也告诉过你。
  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()