Question
arrêt dans le pipeline
- Gaga
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 39
- Remerciements reçus 0
J'aimerais stopper \"mon flux d'objet\" dans un pipeline quand je le souhaite et récupérer les objets. Je suis pas clair ?
[code:1]$variable = gci D:\exemple | foreach { $i=0 } { $i++ ; if ($i -le 3) { $_ } else { break } } { }[/code:1]
$variable est nulle (non renseigné) et pourtant j'ai bien mon flux d'objet (dans mon exemple 3 fichiers) :
gci D:\exemple | foreach { $i=0 } { $i++ ; if ($i -le 3) { $_ } else { break } } { }
Répertoire : D:\exemple
Mode LastWriteTime Length Name
----
----
d---- 26/03/2012 21:35 .homeplayer
d-r-- 17/02/2012 16:54 Contacts
d-r-- 17/04/2012 21:54 Desktop
comprends pas !! Faut pas mettre break pour sortir .... comment sortir proprement du pipeline tout en récupérant les objets (pas tous) dans une variable ???
Connexion ou Créer un compte pour participer à la conversation.
- SiSMik
- Hors Ligne
- Membre platinium
-
- Messages : 492
- Remerciements reçus 0
Stopper une commande avec break peut avoir des incidences sur d'autres scripts fonctionnant ce n'est à mon avis pas la bonne méthode à utiliser.
[code:1]gci D:\exemple | select -first 3 [/code:1]
Comme ça tu prends les 3 premiers
Connexion ou Créer un compte pour participer à la conversation.
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
- Messages : 530
- Remerciements reçus 0
Tu peux aussi consulter l'aide disponible dans powershell via :
[code:1]Help about_break[/code:1]
On remarque que le break est utilisé dans des structures d'itération for/foreach/while/do/switch.
Ici tu essayes de l'utiliser dans une cmdlet ce qui n'est pas prévu par PowerShell à mon avis.
Bien Cordialement,
Richard Lazaro.
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Connexion ou Créer un compte pour participer à la conversation.
- Gaga
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 39
- Remerciements reçus 0
Stopper une commande avec break peut avoir des incidences sur d'autres scripts fonctionnant ce n'est à mon avis pas la bonne méthode à utiliser.
[code:1] gci D:\exemple | select -first 3 [/code:1]
Comme ça tu prends les 3 premiers
En fait j'aimerais stopper le flux d'objet dans le pipeline dès qu'une condition sur un objet (dans le flux) est satisfaite.
Par ex, la cmdlet get-winevent nous renvois des objets représentant les évènements dans un journal du plus récent au plus vieux, j'aurais aimé ne sélectionner que les évènements des 5 dernières minutes, sans charger tout le journal dans une variable avant de travailler dessus. Car si le journal contient > milliers de lignes, ben ça prends un temps foufoufoufou !!
Arfff j'ai pas trouvé mon bonheur, je vais encore chercher dans les help/doc/livres si je trouve qq chose.Tu peux aussi consulter l'aide disponible dans powershell
Connexion ou Créer un compte pour participer à la conversation.
- SiSMik
- Hors Ligne
- Membre platinium
-
- Messages : 492
- Remerciements reçus 0
[code:1]Get-EventLog -After $time[/code:1]
Du coup ça récupère les log que depuis un certain $time
Ce qui n'empêche pas d'être plus pointu dans les filtres
[code:1]Get-EventLog -After $time -LogName Security [/code:1]
Et de mettre une clause where dans le pipe...
Voili voilou
@+
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 69
benduru écrit:
Mais PS itére tout de même sur la totalité de la collection, c'est trompeur. CE comportement devrait changer dans la v3, et si je me souviens bien cette version proposera un attribut pour gérer ces cas là :Comme ça tu prends les 3 premiers
Richard Lazaro écrit:# The SupportsPaging parameter of the Cmdlet attribute allows a user
# to specify the -IncludeTotalCount, -Skip, and -First parameters, which
# are used for paging the results from a data-source query operatio
Si, enfin le langage le permet, mais c'est le comportement actuel qui n'est pas celui que l'on aimerait avoir.Ici tu essayes de l'utiliser dans une cmdlet ce qui n'est pas prévu par PowerShell à mon avis.
Il y a qq temps, Tobias Weltner a rédigé un article sur le sujet, voir aussi le commentaire très important de Jeffrey Snover.
L'autre approche est de mémoriser les données reçues dans un variable déclarée avant le pipeline, Janel avait rédigé un post sur le sujet, mais son blog n'existe plus.
benduru écrit:
Oui, c'est la bonne approche ici, mais elle n'est pas tjr possible.Tu peux mettre des filtres de ce genre
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- arrêt dans le pipeline