2017-05-28 61 views
2

我嘗試讓PowerShell吐出一個語義版本控制變量,但卡住它只顯示我輸入的命令(在ISE中執行此操作)或2個錯誤('缺少參數'或'不接受管道輸入'),如果我嘗試解決它們,則只需再次顯示該命令即可。Select-String -Pattern當管道輸入時輸出

我如何獲得這樣的:

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

假設正則表達式和web請求點實事簡單地粘在-OutVariable搜索術語定義?


在更一般的說明中,是否有一種很好的方法來顯示管道中對象的屬性?經過大量的挖掘之後,我偶然發現了{$_},但是如果命令稍微複雜一些,只是一個簡單的cmdlet,就無法再顯示除命令外的任何內容。

+0

我還在玩弄它,無法讓它輸出一些有意義的東西。以下幾行可能會表達更多我在找的內容:'(Invoke-WebRequest -URI https://nodejs.org/dist/latest)|選擇Links.href.ToString | Select-String -Pattern「v \ d + \。\ d + \。\ d +/s」-OutVariable $ NodeVer_target' –

回答

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 

後者其實更豪華。


作爲用於檢查當前對象在流水線:管道進入Get-Member得到的管道化對象的屬性/方法的列表,和管進入Format-List *得到管道化對象的值的列表。