Select-String -Pattern Output при передаче в

Я пытаюсь заставить PowerShell выдать семантическую переменную управления версиями, но застреваю в ней, отображая только введенную команду (делая это в ISE) или одну из двух ошибок («отсутствует аргумент» или «не принимает конвейерный ввод») , которые, если я попытаюсь их разрешить, заканчиваются тем, что команда просто отображается снова.

Как мне это получить:

(Invoke-WebRequest -Uri http://someplace).Links.href | Out-String -Stream |
    Select-String -Pattern [regex]$someGoodRegex -OutVariable $NodeVersion_target

предполагая, что регулярное выражение и веб-запрос указывают на твердые вещи, чтобы просто вставить искомый термин в определенное -OutVariable?


В более общем плане: есть ли хороший способ отобразить свойства объектов в канале? После долгих копаний я наткнулся на {$_}, но не могу заставить его снова отображать что-либо, кроме команды, если команда становится немного сложнее, чем простой командлет.


person danwalterlink    schedule 28.05.2017    source источник
comment
Я все еще возился с ним и не могу заставить его вывести что-то значимое. Следующие строки могут лучше выразить то, что я ищу: (Invoke-WebRequest -URI https://nodejs.org/dist/latest) | Select Links.href.ToString | Select-String -Pattern "v\d+\.\d+\.\d+/s" -OutVariable $NodeVer_target   -  person danwalterlink    schedule 28.05.2017


Ответы (1)


Удалите [regex]. Select-String уже обрабатывает аргумент параметра -Pattern как регулярное выражение.

Удалите $ из имени переменной. Вам нужно использовать переменную напрямую, но параметр -OutVariable предполагает простое имя переменной без начального $.

Вы также можете удалить файл Out-String -Stream.

Что-то вроде этого должно работать:

$uri = 'http://www.example.com/'
$re  = 'v\d+\.\d+\.\d+/s'
(Invoke-WebRequest -Uri $uri).Links.href |
    Select-String -Pattern $re -OutVariable NodeVersion_target

В качестве альтернативы вы можете назначить вывод конвейера переменной вместо использования -OutVariable:

$uri = 'http://www.example.com/'
$re  = 'v\d+\.\d+\.\d+/s'
$NodeVersion_target = (Invoke-WebRequest -Uri $uri).Links.href |
                      Select-String -Pattern $re

Последнее на самом деле больше PoSh.


Что касается проверки текущего объекта в конвейере: направьте в Get-Member, чтобы получить список свойств/методов конвейерных объектов и передать их в Format-List *, чтобы получить список значений конвейерных объектов.

person Ansgar Wiechers    schedule 28.05.2017