【问题标题】:How to pipeline batch script output to a PowerShell script?如何将批处理脚本输出通过管道传输到 PowerShell 脚本?
【发布时间】:2016-01-03 14:36:43
【问题描述】:

我需要使用 HTTP Apache 管道日志将响应代码为“400”的所有条目放入单独的文件中。为此,我想使用 PowerShell Select-String,因为它最接近 Linux 中的 grep 命令:

我有以下批处理可以从 cmd 环境中调用 PowerShell 脚本:

powershell -command "& { sls ,400, 'cmd -ca | select -exp line >> access_400.log }"

据我所知,httpd 中的“CustomLog”会是这样的:

CustomLog "| 'call_powershell_script_that_will_extract_400_entries.ps1' " common

如何将 CustomLog 的管道输出输入到将提取具有“400”响应代码的条目的 PowerShell 脚本?

【问题讨论】:

  • 您没有完全在 PowerShell 中执行此操作的任何特殊原因?我的意思是,除了一种不可抗拒的冲动,让你的生活变得比它需要的更复杂。
  • 我以为在“|”之后需要批处理文件,不知道它也接受powershell脚本无论如何我让脚本在CustomLog之外工作,但是当我使用它时,output.log被锁定并且apache中的error.log被填充“文件无法打开,因为它正被另一个进程使用”
  • 将所有条目写入单个日志文件然后从通用日志文件中获取您关心的 400 个条目会更容易吗?我觉得这将是一个更好的解决方案,试图将一些疯狂的东西写入 Apache 配置文件,但可能会出错。此外,此时使用 PowerShell 的工作要简单得多。它只是“Get-Content httpRoot\logs*.log | Select-String -Pattern 400”,如果您想这样做,也可以作为计划作业运行。让日志在一天左右后更改名称可能会更好。
  • @PSGuy 这几乎就是我目前的 B 计划。使其成为 PowerShell 脚本的问题在于性能。我拥有的 access.log 可能以 GB 为单位。使用 PowerShell,这将需要很长时间。我目前正在制作一个简单的 java 程序来处理读取和过滤 access.log 的过程

标签: windows apache powershell batch-file


【解决方案1】:

在您的脚本中使用自动 PowerShell 变量 $input

我不完全理解你的脚本,但你应该能够推断出这个类似的例子:

<strong>filter.bat</strong>
@powershell -command "$input | select-string -casesensitive -pattern '%1' | select-object -expandproperty line | out-file -append -encoding ASCII output.log"

$input 将填充 BAT/CMD 文件的控制台输入。

要进行测试,请在命令行中使用dir | filter.bat ".exe",然后使用type output.log

值得注意的是,我使用的是 out-file 而不是 powershell 重定向运算符,因此输出文件不会以 powershell 默认的 UTF-16 编码,而是作为更普遍可用的 ASCII 文件。

【讨论】:

  • 非常感谢。通过在 CMD 上进行测试,它可以按我的需要工作。但是当我在 apache httpd.conf 的 CustomLog 中使用它时,由于某种原因,我一直有脚本失败,因为它无法打开 output.log 文件,因为它正在被另一个进程使用......我正在尝试解决这但不确定如何......你有什么想法吗?非常感谢您之前的脚本!
  • 我不知道(或设置)所有这些组件一起工作,但我会首先尝试将日志文件移出 powershell 脚本,就像 @powershell -command "$input | select-string -casesensitive -pattern '%1' | select-object -expandproperty line" &gt;&gt; output.log 一样。
猜你喜欢
  • 2010-10-24
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
相关资源
最近更新 更多