none
Invoke-WebRequest и select-string

    Вопрос

  • Добрый день. Ситуация: есть несколько серверов, на них веб-страничка простенькая, на страничке есть описание версии вида

    <pre>version: 2.0.4 (или 2.0.3)

    необходимо пропарсить страничку на предмет версии и создать текстовый файл вида IP_server+version.txt

    Создаю следующую конструкцию для парсинга:

    $web = Invoke-Webrequest -Uri server_ip

    $web.Content (тут он мне выдает полный html код странички, где в т.ч. есть и искомая строка version)

    хочу сделать так:

    $web.content | Select-String "version:"

    В ответ скрипт мне снова выдает все содержимое страницы. Вопрос - ЧЯДНТ?

    Заранее спасибо за уделенное время и внимание.

    17 февраля 2017 г. 8:19

Ответы

  • PS C:\Users\user> $web.content | "(?s)version:(\d+\.\d+\.\d+)" | % {$matches[1]}
    строка:1 знак:16
    + $web.content | "(?s)version:(\d+\.\d+\.\d+)" | % {$matches[1]}
    +                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Выражения допускаются только в качестве первого элемента конвейера.
        + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline

    или я как то неверно синтаксис понял?

    Почти...

    Имелось в виду:

    $web.content | ? {$_ -match "(?s)version:(\d+\.\d+\.\d+)" } | % {$matches[1]}

    Попробуйте дать пример строки version

    Так же можно поделать -split '`r'

    В частности так

    $web.content -split '`r' | Select-String "version:"



    The opinion expressed by me is not an official position of Microsoft

    • Помечено в качестве ответа KazunMVP, Editor 17 февраля 2017 г. 10:28
    17 февраля 2017 г. 10:03
    Модератор
  • А если так?

    "(?s)version:\s+(\d+\.\d+\.\d+)"


    17 февраля 2017 г. 8:44
    Отвечающий

Все ответы

  • $web.content | ? {$_ -match "version: (\d+\.\d+\.\d+)"} | % {$matches[1]}

    17 февраля 2017 г. 8:28
    Отвечающий
  • извините, не помогло. Выдает:

    PS C:\Users\user> $web.content | ? {$_ -match "version: (\d+\.\d+\.\d+)"} | % {$matches[1]}
    PS C:\Users\user>

    т.е. строка для передачи в переменную не выдается



    17 февраля 2017 г. 8:34
  • А если так?

    "(?s)version:\s+(\d+\.\d+\.\d+)"


    17 февраля 2017 г. 8:44
    Отвечающий
  • PS C:\Users\user> $web.content | "(?s)version:(\d+\.\d+\.\d+)" | % {$matches[1]}
    строка:1 знак:16
    + $web.content | "(?s)version:(\d+\.\d+\.\d+)" | % {$matches[1]}
    +                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Выражения допускаются только в качестве первого элемента конвейера.
        + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline

    или я как то неверно синтаксис понял?

    17 февраля 2017 г. 9:03
  • PS C:\Users\user> $web.content | "(?s)version:(\d+\.\d+\.\d+)" | % {$matches[1]}
    строка:1 знак:16
    + $web.content | "(?s)version:(\d+\.\d+\.\d+)" | % {$matches[1]}
    +                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Выражения допускаются только в качестве первого элемента конвейера.
        + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline

    или я как то неверно синтаксис понял?

    Почти...

    Имелось в виду:

    $web.content | ? {$_ -match "(?s)version:(\d+\.\d+\.\d+)" } | % {$matches[1]}

    Попробуйте дать пример строки version

    Так же можно поделать -split '`r'

    В частности так

    $web.content -split '`r' | Select-String "version:"



    The opinion expressed by me is not an official position of Microsoft

    • Помечено в качестве ответа KazunMVP, Editor 17 февраля 2017 г. 10:28
    17 февраля 2017 г. 10:03
    Модератор
  • да, спасибо, первая строка сработала. Еще раз спасибо большое.
    17 февраля 2017 г. 10:08