【问题标题】:Execute CMD command and Stream CMD results to StreamWriter执行 CMD 命令并将 CMD 结果流式传输到 StreamWriter
【发布时间】:2016-06-20 11:45:07
【问题描述】:
我正在尝试执行 CMD 命令并将命令的结果流式传输到流式写入器。原因是我试图筛选的日志文件每个高达 1gb,将结果存储到一个变量中很容易用掉几个 gigs 的内存。由于性能优美,我也想通过管道输出到 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()
【问题讨论】:
标签:
powershell
streamwriter
powershell-1.0
【解决方案1】:
- 不要混合使用 CMD 和 PowerShell。使用其中一种。我已经告诉过你last time。
- 不再使用 PowerShell v1。任何仍受支持的 Windows 系统至少可以运行 PowerShell v2。立即升级。
- 从 PowerShell 运行可执行文件不需要 CMD。我也告诉过你。
- 如果您将命令行放在引号中,PowerShell 将简单地回显它,而不是执行它。
- 要过滤通配符匹配,请使用
-like 运算符。
- 流写入器不从管道中读取。您需要将它们包装在
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()