(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
参考:
- WebClient.DownloadString 方法返回单个字符串