在 PowerShell 管道中解析日志文件的问题

在 PowerShell 管道中解析日志文件的问题
(new-object System.Net.WebClient).DownloadFile('http://192.168.100.1/cgi-bin/status_cgi','C:\file.txt')

从 Arris 调制解调器检索状态页面。

select-string -Path "C:\file.txt" -pattern "Uptime"

产量:

C:\file.txt:96:<tbody><tr><td width="160">System Uptime: </td><td>0 d: 18 h: 33  m</td></tr>

正如预期的那样,但是

(new-object System.Net.WebClient).Downloadstring('http://192.168.100.1/cgi-bin/status_cgi') | select-string -pattern 'Uptime'

打印整个页面并且不选择字符串。

从 Webclient 请求流输出也不会“管道化”

(new-object System.Net.WebClient).openread('http://192.168.100.1/cgi-bin/status_cgi') | select-string -pattern 'Uptime'

我错过了什么?

答案1

当您将输出通过管道传输System.Net.WebClient选择字符串,输出被视为一个字符串,这就是为什么输出作为一个整体进行匹配。

当您将 的输出保存System.Net.WebClient到文件,然后使用 读取它时Select-String -Path path/to/the/file选择字符串将文件内容视为行数组,并仅返回与模式匹配的行。

仅供参考:在 Powershell 3+ 中,使用起来更方便调用 Web 请求命令:

$uri = 'http://192.168.100.1/cgi-bin/status_cgi'
(Invoke-WebRequest -Uri $uri).Content -split "`n" |
    Select-String -SimpleMatch Uptime

参考:

相关内容