2017-05-28 3 views
2

J'essaie de faire en sorte que PowerShell crache une variable de version sémantique mais reste bloquée en affichant simplement la commande que j'ai entrée (en faisant cela dans l'ISE) ou l'une des 2 erreurs ('missing argument 'ou' n'accepte pas l'entrée piped '), ce qui, si j'essaie de les résoudre, se termine par une simple ré-affichage de la commande.Select-String -Pattern Sortie lors de l'insertion dans

Comment puis-je obtenir ceci:

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

en supposant que le point de demande regex et Web à des choses solides simplement coller le terme recherché dans le -OutVariable défini?


Sur une note plus générale, existe-t-il un bon moyen d'afficher les propriétés des objets dans le tube? Après beaucoup de creuser, je suis tombé sur {$_} mais je ne peux pas l'obtenir pour afficher autre chose que la commande si la commande devient un peu plus complexe qu'une simple cmdlet.

+0

Je suis toujours en train de tripoter et je n'arrive pas à obtenir quelque chose de significatif. Les lignes suivantes peuvent exprimer plus ce que je cherche: '(Invoke-WebRequest -URI https://nodejs.org/dist/latest) | Sélectionnez Links.href.ToString | Select-String -Pattern "v \ d + \. \ D + \. \ D +/s" -OutVariable $ NodeVer_target ' –

Répondre

0

Supprimez le [regex]. Select-String traite déjà l'argument au paramètre -Pattern en tant qu'expression régulière.

Supprimez le $ du nom de la variable. Vous en avez besoin pour utiliser une variable directement, mais le paramètre -OutVariable s'attend à ce que le nom de la variable brute soit $. Vous pouvez également supprimer le code Out-String -Stream.

Quelque chose comme cela devrait fonctionner:

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

vous pouvez également affecter la sortie de la canalisation à une variable au lieu d'utiliser -OutVariable:

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

Ce dernier est en fait plus posh.


En ce qui concerne l'inspection de l'objet courant dans un pipeline: tuyau dans Get-Member pour obtenir une liste des propriétés/méthodes des objets en pipeline, et le tuyau en Format-List * pour obtenir une liste des valeurs des objets en pipeline.