Probleme beim Parsen einer Protokolldatei in der PowerShell-Pipeline

1
(new-object System.Net.WebClient).DownloadFile('http://192.168.100.1/cgi-bin/status_cgi','C:\file.txt')

Ruft die Statusseite von einem Arris-Modem ab.

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

ergibt:

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

wie erwartet, aber

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

druckt die gesamte Seite und wählt die Zeichenfolge nicht aus.

Das Anfordern einer Stream-Ausgabe vom Webclient wird auch nicht "weiterleiten"

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

Was vermisse ich?

Alexamation
quelle
1
Sie müssen den zurückgegebenen String mit dem -splitOperator -> (new-object System.Net.WebClient).openread('http://192.168.100.1/cgi-bin/status_cgi') -split "r aufteilen ? n" | select-string -pattern 'Uptime'
LotPings

Antworten:

-1

Wenn Sie die Ausgabe von System.Net.WebClientan Select-String leiten , wird die Ausgabe als eine Zeichenfolge behandelt, weshalb die Ausgabe als Ganzes abgeglichen wird.

Wenn Sie die Ausgabe System.Net.WebClientin einer Datei speichern und dann mit lesen Select-String -Path path/to/the/file, behandelt Select-String den Inhalt der Datei als Array von Zeilen und gibt nur Zeilen zurück, die mit dem Muster übereinstimmen.

Zu Ihrer Information: In Powershell 3+ ist es bequemer, das Cmdlet Invoke-WebRequest zu verwenden:

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

Verweise:

Maoizm
quelle