2017-05-28 3 views
2

Ich versuche PowerShell zu bekommen, um eine semantische Versionierungsvariable auszuspucken, aber bleibe dabei und zeige nur den eingegebenen Befehl (in der ISE) oder einen von zwei Fehlern ('fehlt Argument 'oder' akzeptiert keine Piped-Eingabe '), die, wenn ich versuche, sie zu lösen, in dem Befehl endet, der einfach wieder angezeigt wird.Select-String -Pattern Output beim Piping in

Wie bekomme ich diese:

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

die Regex und Web-Anfrage Punkt auf feste Dinge unter der Annahme der gesuchte Begriff in der -OutVariable definiert einfach zu bleiben?


Auf einer allgemeineren Anmerkung, gibt es eine gute Möglichkeit, die Eigenschaften der Objekte in der Pipe anzuzeigen? Nach sehr viel graben stolperte ich auf {$_}, aber es kann nichts anderes als den Befehl wieder anzeigen, wenn der Befehl ein wenig komplizierter als nur ein einfaches Cmdlet wird.

+0

Ich fummle immer noch herum und kann es nicht dazu bringen, etwas Sinnvolles auszugeben. Die folgenden Zeilen können mehr ausdrücken, was ich suche: '(Invoke-WebRequest -URI https://nodejs.org/dist/latest) | Wählen Sie Links.href.ToString | Select-String -Pattern "v \ d + \. \ D + \. \ D +/s" -OutVariable $ KnotenVer_Ziel ' –

Antwort

0

Entfernen Sie die [regex]. Select-String behandelt das Argument bereits als regulären Ausdruck mit dem Parameter -Pattern.

Entfernen Sie die $ aus dem Variablennamen. Sie benötigen es, um eine Variable direkt zu verwenden, aber der -OutVariable Parameter erwartet den blanken Variablennamen ohne den führenden $.

Sie können auch die Out-String -Stream entfernen.

So etwas sollte funktionieren:

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

Alternativ können Sie die Ausgabe der Pipeline zu einer Variablen zuweisen, anstatt -OutVariable der Verwendung:

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

Letztere eigentlich mehr Posh ist.


wie für das aktuelle Objekt in einer Pipeline Inspizieren: Rohres in Get-Member eine Liste der Eigenschaften/Methoden der Pipeline-Objekte zu erhalten, und das Rohr in Format-List * eine Liste der Werte der Pipeline- Objekte zu erhalten.