2

我尝试让 PowerShell 吐出一个语义版本控制变量,但卡在其中只显示我输入的命令(在 ISE 中执行此操作)或 2 个错误(“缺少参数”或“不接受管道输入”) ,如果我尝试解决它们,则以再次显示的命令结束。

我怎么得到这个:

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

假设正则表达式和网络请求指向可靠的东西以简单地将搜索的术语粘贴在-OutVariable定义中?


更笼统地说,有没有一种好方法可以显示管道中对象的属性?经过大量的挖掘,我偶然发现,{$_}但如果命令变得比简单的 cmdlet 更复杂一点,则无法让它再次显示命令以外的任何内容。

4

1 回答 1

0

删除[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 *以获取管道对象的值列表。

于 2017-05-28T15:04:28.023 回答