Question utilisaton d'un where avec une chaîne construite
- David RICQ
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 6
- Remerciements reçus 0
il y a 13 ans 11 mois #11599
par David RICQ
utilisaton d'un where avec une chaîne construite a été créé par David RICQ
Bonjour,
J'ai un script qui présente des données dans un Datagridview... et jusque là tout va bien.
J'aimerai apporter une amélioration en permettant aux utilisateurs de rentrer des critères de recherche. Pour faire cela il faut ajouter un pipe comme:\" | Where{xxxxx} \".
comme j'ai plusieurs critères de recherche, je construit la chaine qui devra remplacer xxxxx. Jusque là tout va bien. J'ai testé le contenu de la chaîne il est bon
Mon problème est que lorsque l'envoie l'instruction avec la condition supplémentaire c'est comme si elle n'était pas interprétéé.
exemple :
$Where1 = '$_.Name -match \"Test\"'
$dataFind = Get-XdVirtualDesktop | Where {$Where1}
Si ce lance l'instruction écrite complétement j'ai bien un filtre....
Quelqu'un voit'il où est le problème?
Merci par avance de toutes vos aides...
J'ai un script qui présente des données dans un Datagridview... et jusque là tout va bien.
J'aimerai apporter une amélioration en permettant aux utilisateurs de rentrer des critères de recherche. Pour faire cela il faut ajouter un pipe comme:\" | Where{xxxxx} \".
comme j'ai plusieurs critères de recherche, je construit la chaine qui devra remplacer xxxxx. Jusque là tout va bien. J'ai testé le contenu de la chaîne il est bon
Mon problème est que lorsque l'envoie l'instruction avec la condition supplémentaire c'est comme si elle n'était pas interprétéé.
exemple :
$Where1 = '$_.Name -match \"Test\"'
$dataFind = Get-XdVirtualDesktop | Where {$Where1}
Si ce lance l'instruction écrite complétement j'ai bien un filtre....
Quelqu'un voit'il où est le problème?
Merci par avance de toutes vos aides...
Connexion ou Créer un compte pour participer à la conversation.
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 530
- Remerciements reçus 0
il y a 13 ans 10 mois #11600
par Richard Lazaro
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Réponse de Richard Lazaro sur le sujet Re:utilisaton d'un where avec une chaîne construite
Bonjour,
Alors ceci est trés simple. Une chaîne de caractère est ... une chaîne de caractère.
Or la cmdlet Where-Object attend un booléen comme résultat dans son scriptblock.
Il faut savoir qu'une chaîne de caractère (qui est convertit en booléen) vaut $true.
Pour cela, il faut que tu interpréte ta chaîne et cela est possible avec le cmdlet Invoke-Expression
[code:1]
$Where1 = '$_.Name -match \"Test\"'
$dataFind = Get-XdVirtualDesktop | Where {Invoke-Expression $Where1}
[/code:1]
Alors ceci est trés simple. Une chaîne de caractère est ... une chaîne de caractère.
Or la cmdlet Where-Object attend un booléen comme résultat dans son scriptblock.
Il faut savoir qu'une chaîne de caractère (qui est convertit en booléen) vaut $true.
Pour cela, il faut que tu interpréte ta chaîne et cela est possible avec le cmdlet Invoke-Expression
[code:1]
$Where1 = '$_.Name -match \"Test\"'
$dataFind = Get-XdVirtualDesktop | Where {Invoke-Expression $Where1}
[/code:1]
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 13 ans 10 mois #11601
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:utilisaton d'un where avec une chaîne construite
Salut,
Richard Lazaro écrit:
[code:1]
$Where1 = {$_.Name -match \"Test\"}
$dataFind = Get-XdVirtualDesktop | Where $Where1
[/code:1]
Ainsi pas d'ambiguité possible, on utilise du code la où le cmdlet attend du code.
Richard, l'appel à Invoke-Expression se fait à chaque appel, pas besoin de reconstruire le code de test à chaque itération.
Bdouille écrit:
En utilisant le dynamisme, tu paramètres tjr des traitements mais au lieu de passer des données du passe du code.
Un peu de lecture ?
Richard Lazaro écrit:
Dans ce cas, et puisqu'on est dans le dynamisme, mieux vaut utiliser un scriptblock directement, c'est à dire du code construit à l'aide de 'texte' :Pour cela, il faut que tu interpréte ta chaîne
[code:1]
$Where1 = {$_.Name -match \"Test\"}
$dataFind = Get-XdVirtualDesktop | Where $Where1
[/code:1]
Ainsi pas d'ambiguité possible, on utilise du code la où le cmdlet attend du code.
Richard, l'appel à Invoke-Expression se fait à chaque appel, pas besoin de reconstruire le code de test à chaque itération.
Bdouille écrit:
Si tu utilises le terme d'instruction il faut qu'il soit lié à du code, sinon, comme le dit Richard, cela ne reste qu'une chaîne de caractères à transformer en code avant usage.Mon problème est que lorsque l'envoie l'instruction avec la condition supplémentaire c'est comme si elle n'était pas interprétéé.
En utilisant le dynamisme, tu paramètres tjr des traitements mais au lieu de passer des données du passe du code.
Un peu de lecture ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- David RICQ
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 6
- Remerciements reçus 0
il y a 13 ans 10 mois #11602
par David RICQ
Réponse de David RICQ sur le sujet Re:utilisaton d'un where avec une chaîne construite
Alors là... cela parait tellement évident maintenant avec ces explications.
Comment j'ai pu passer une après-midi sur ce problème?
Merci beaucoup de ton temps et de tes compétences.
A bientôt
Comment j'ai pu passer une après-midi sur ce problème?
Merci beaucoup de ton temps et de tes compétences.
A bientôt
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 13 ans 10 mois #11603
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:utilisaton d'un where avec une chaîne construite
Bdouille écrit:

C'est un passage obligé de l'apprentissage de PS, et puis lorsque l'on commence à être confronté à ce type de pb/code, c'est le signe que l'on franchi un cap.
Bdouille écrit:
Tout le monde y a droit, tu n'es pas le premier ni le dernierComment j'ai pu passer une après-midi sur ce problème?
C'est un passage obligé de l'apprentissage de PS, et puis lorsque l'on commence à être confronté à ce type de pb/code, c'est le signe que l'on franchi un cap.
Bdouille écrit:
M'est avis que \"votre temps\" et \"vos compétences\" sont plus appropriés.Merci beaucoup de ton temps et de tes compétences.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 530
- Remerciements reçus 0
il y a 13 ans 10 mois #11604
par Richard Lazaro
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Réponse de Richard Lazaro sur le sujet Re:utilisaton d'un where avec une chaîne construite
Je suis d'accord avec toi d'utiliser le ScriptBlock mais est ce que cela va répondre au besoin ?
nous n'avons pas la connaissance de l'algo avant cet appel. Peut être qu'il se retrouve uniquement avec une chaîne de caractère, je suis parti de ce postulat.
nous n'avons pas la connaissance de l'algo avant cet appel. Peut être qu'il se retrouve uniquement avec une chaîne de caractère, je suis parti de ce postulat.
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.
Temps de génération de la page : 0.054 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les initiés
- utilisaton d'un where avec une chaîne construite