【问题标题】: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】:
  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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 2016-06-17
    • 2015-04-16
    • 1970-01-01
    相关资源
    最近更新 更多