【问题标题】:Select-String -Pattern Output when piping intoSelect-String -Pattern 管道输入时的输出
【发布时间】:2017-05-28 08:18:14
【问题描述】:

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

我如何得到这个:

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

假设正则表达式和网络请求指向可靠的东西,只需将搜索词粘贴在定义的 -OutVariable 中?


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

【问题讨论】:

  • 我还在纠结它,无法让它输出有意义的东西。以下几行可能会表达我正在寻找的更多内容:(Invoke-WebRequest -URI https://nodejs.org/dist/latest) | Select Links.href.ToString | Select-String -Pattern "v\d+\.\d+\.\d+/s" -OutVariable $NodeVer_target

标签: powershell debugging pipe select-string


【解决方案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 * 以获取管道对象的值列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多