1
(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 ответ1

-1

Когда вы передаете по конвейеру вывод System.Net.WebClient для Select-String, вывод обрабатывается как одна строка, поэтому выход сопоставляется в целом.

При сохранении вывода System.Net.WebClient к файлу и затем считывает его, используя Select-String -Path path/to/the/file , Select-String обрабатывает содержимое файла как массив строк и возвращает только строки, соответствующие шаблону.

К вашему сведению: в Powershell 3+ удобнее использовать командлет Invoke-WebRequest :

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

Рекомендации:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .