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 10 mois #11605
par David RICQ
Réponse de David RICQ sur le sujet Re:utilisaton d'un where avec une chaîne construite
re,
Oui merci de votre temps et de vos compétences (j'avais répondu dans la minute de la deuxième réponse)
Apres divers tests ce qui fonctionne le mieux est le \"Invoke-Expression\". Avec le scriptblock j'ai un retour en erreur de Where-Object
Where-Object : Cannot bind parameter 'FilterScript'. Cannot convert the \"{$_.Name -match \"P2PN\"}\" value of type \"System.String\" to type \"System.Management.Automation.Scrip
tBlock\".
Oui merci de votre temps et de vos compétences (j'avais répondu dans la minute de la deuxième réponse)
Apres divers tests ce qui fonctionne le mieux est le \"Invoke-Expression\". Avec le scriptblock j'ai un retour en erreur de Where-Object
Where-Object : Cannot bind parameter 'FilterScript'. Cannot convert the \"{$_.Name -match \"P2PN\"}\" value of type \"System.String\" to type \"System.Management.Automation.Scrip
tBlock\".
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 #11606
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
L'erreur vient du fait que c'est toujours un objet de type chaîne de caractère System.String et non scripotblock.
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 #11611
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:utilisaton d'un where avec une chaîne construite
Richard Lazaro écrit:
Richard Lazaro écrit:
Il manque un élément dans ma réponse, à savoir la construction dynamique du scriptblock :
[code:1]
#construit une chaine représentant du code
$DéfinitionDuFiltreConstruit='$_.FullName -match \"temp\"'
#construit du code
$FiltreConstruit=$ExecutionContext.InvokeCommand.NewScriptBlock($DéfinitionDuFiltreConstruit)
#Exécute le code
$dataFind = Dir C:\Temp\*.* | Where $FiltreConstruit
[/code:1]
Ici j'ai supposé que le filtre était tjr présent et que le besoin était basé sur un scriptblock.
Si on veut construire l'intégralité de l'appel, il faut reprendre ta proposition :
[code:1]
$Where1 = '$_.FullName -match \"temp\"'
$dataFind = Dir C:\Temp\*.* | Where {Invoke-Expression $Where1}
[/code:1]
et la modifier par exemple comme ceci :
[code:1]
$Where1 = '$_.FullName -match \"temp\"'
$path='c:\temp\*.*'
$Code=@\"
Dir $Path | Where {$Where1}
\"@
$dataFind = Invoke-Expression $Code
[/code:1]
Et là, effectivement comme tu l'as dit, le développeur doit connaitre les specs fonctionnelles pour proposer une solution complète.
Pour le moment il est question du mécanisme d'appel du code construit.
Tel que présenté, non, tu as raison.mais est ce que cela va répondre au besoin ?
Richard Lazaro écrit:
C'est vrai, mais ce qui nous intéresse dans le pb présenté, c'est le résultat de la construction du filtre, une chaîne de caractères et sa transformation en code.nous n'avons pas la connaissance de l'algo avant cet appel.
Il manque un élément dans ma réponse, à savoir la construction dynamique du scriptblock :
[code:1]
#construit une chaine représentant du code
$DéfinitionDuFiltreConstruit='$_.FullName -match \"temp\"'
#construit du code
$FiltreConstruit=$ExecutionContext.InvokeCommand.NewScriptBlock($DéfinitionDuFiltreConstruit)
#Exécute le code
$dataFind = Dir C:\Temp\*.* | Where $FiltreConstruit
[/code:1]
Ici j'ai supposé que le filtre était tjr présent et que le besoin était basé sur un scriptblock.
Si on veut construire l'intégralité de l'appel, il faut reprendre ta proposition :
[code:1]
$Where1 = '$_.FullName -match \"temp\"'
$dataFind = Dir C:\Temp\*.* | Where {Invoke-Expression $Where1}
[/code:1]
et la modifier par exemple comme ceci :
[code:1]
$Where1 = '$_.FullName -match \"temp\"'
$path='c:\temp\*.*'
$Code=@\"
Dir $Path | Where {$Where1}
\"@
$dataFind = Invoke-Expression $Code
[/code:1]
Et là, effectivement comme tu l'as dit, le développeur doit connaitre les specs fonctionnelles pour proposer une solution complète.
Pour le moment il est question du mécanisme d'appel du code construit.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.050 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les initiés
- utilisaton d'un where avec une chaîne construite