Question
ForEach est-il obligatoire
- jojo
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 187
- Remerciements reçus 0
il y a 15 ans 4 mois #7968
par jojo
ForEach est-il obligatoire a été créé par jojo
bonjour, 
il y a un problème que je n'ai pas pu résoudre, voici mes test:
[code:1]PS> ls *.txt
-a--- 05/12/2003 13:15 7798 sendkeys.txt
-a--- 29/03/2010 06:17 5170 table.txt
PS> ls | gm
TypeName: System.IO.FileInfo
Name MemberType Definition
----
Mode CodeProperty System.String Mode{get=Mode;}
AppendText Method System.IO.StreamWriter AppendText()
...
.....
.....
Length Property System.Int64 Length {get;}
Name Property System.String Name {get;}
# donc il y a une propriété \"NAME\"
PS> (ls *.txt).name
PS>
PS> ls *.txt | ForEach { $_.name }
sendkeys.txt
table.txt[/code:1]
voici ma question:
comment pouvons-nous exploiter les proprités/méthodes d'une commande sans passer par un un pipe \"|\"
voir l'exemple:
[code:1](ls *.txt).name # pourquoi ça ne marche pas
ls *.txt | ForEach { $_.name }[/code:1]
merci
<br><br>Message édité par: jojo, à: 26/10/10 19:19
il y a un problème que je n'ai pas pu résoudre, voici mes test:
[code:1]PS> ls *.txt
-a--- 05/12/2003 13:15 7798 sendkeys.txt
-a--- 29/03/2010 06:17 5170 table.txt
PS> ls | gm
TypeName: System.IO.FileInfo
Name MemberType Definition
----
Mode CodeProperty System.String Mode{get=Mode;}
AppendText Method System.IO.StreamWriter AppendText()
...
.....
.....
Length Property System.Int64 Length {get;}
Name Property System.String Name {get;}
# donc il y a une propriété \"NAME\"
PS> (ls *.txt).name
PS>
PS> ls *.txt | ForEach { $_.name }
sendkeys.txt
table.txt[/code:1]
voici ma question:
comment pouvons-nous exploiter les proprités/méthodes d'une commande sans passer par un un pipe \"|\"
voir l'exemple:
[code:1](ls *.txt).name # pourquoi ça ne marche pas
ls *.txt | ForEach { $_.name }[/code:1]
merci
Connexion ou Créer un compte pour participer à la conversation.
- Vara
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 30
- Remerciements reçus 0
il y a 15 ans 4 mois #7971
par Vara
Réponse de Vara sur le sujet Re:ForEach est-il obligatoire
Salut Jojo,
essaye avec ça:
[code:1]
ls | Select-Object name
[/code:1]
Seb
essaye avec ça:
[code:1]
ls | Select-Object name
[/code:1]
Seb
Connexion ou Créer un compte pour participer à la conversation.
- jojo
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 187
- Remerciements reçus 0
il y a 15 ans 4 mois #7972
par jojo
Réponse de jojo sur le sujet Re:ForEach est-il obligatoire
me revoila 
bonsoir Vara
mais ce que je voulais est de mettre le paramètre ou la fonction sans utiliser le pipe \"|\"
pourquoi ceci fonctionne:
[code:1]\"hello\".getEnumerator()[/code:1]
par contre:
[code:1](ls *.txt).name[/code:1]
ne fonctionne pas
merci
bonsoir Vara
mais ce que je voulais est de mettre le paramètre ou la fonction sans utiliser le pipe \"|\"
pourquoi ceci fonctionne:
[code:1]\"hello\".getEnumerator()[/code:1]
par contre:
[code:1](ls *.txt).name[/code:1]
ne fonctionne pas
merci
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 15 ans 4 mois #7973
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:ForEach est-il obligatoire
Salut,
jojo écrit:
Un tableau n'a pas de propriété Name, sauf si tu l'ajoutes et quand bien même elle ne concernerait que l'instance du tableau.
Le foreach énumère la collection, ton tableau, ainsi la propriété Name existe sur chaque objet traité un par un.
L'instruction Foreach ou le cmdlet Foreach appel en interne l'énumérateur (GetEnumerator()), qui précise de traiter les éléments un par un:
[code:1]
$T=ls *.txt
$Enumerator=$T.GetEnumerator()
#traite l'objet pas la collection
,$Enumerator|gm
[/code:1]
Il est possible de ne pas utiliser de pipeline, à la place on utilise de l'aspirine générique :
[code:1]
#sous réserve qu'aucun répertoire ne 'match'
[System.IO.FileSystemInfo[]]$T=ls *.txt
$delegate= [System.Action[System.IO.FileSystemInfo]]{ param($item); Write-host $item.Name}
[System.Reflection.MethodInfo] $Methode = [System.Array].GetMethod(\"ForEach\"«»)
$MethodeGenerique = $Methode.MakeGenericMethod([System.IO.FileSystemInfo])
$MethodeGenerique.Invoke($null,@($T,$delegate))
[/code:1]
Comme tu peux, presque, le voir, on ne peut s'affranchir de l'itération de la collection.
\"Un\" et \"plusieurs\" sont deux concepts différent, donc pour répondre à ta question oui le foreach est obligatoire.
Ceci reste possible, mais on ne manipule plus que des string :
[code:1]
$ofs=\"`r`n\";\"$(ls *.txt).name\"
[/code:1]
Une question en amenant une autre, ici, je te laisserai creuser le pourquoi du comment
<br><br>Message édité par: Laurent Dardenne, à: 26/10/10 22:42
jojo écrit:
La notion d'objet associe une information à une seule instance, un seul objet, ici, c'est à dire avec le couple de parenthèses, tu manipules un tableau.[code:1](ls *.txt).name # pourquoi ça ne marche pas
[/code:1]
Un tableau n'a pas de propriété Name, sauf si tu l'ajoutes et quand bien même elle ne concernerait que l'instance du tableau.
Le foreach énumère la collection, ton tableau, ainsi la propriété Name existe sur chaque objet traité un par un.
L'instruction Foreach ou le cmdlet Foreach appel en interne l'énumérateur (GetEnumerator()), qui précise de traiter les éléments un par un:
[code:1]
$T=ls *.txt
$Enumerator=$T.GetEnumerator()
#traite l'objet pas la collection
,$Enumerator|gm
[/code:1]
Il est possible de ne pas utiliser de pipeline, à la place on utilise de l'aspirine générique :
[code:1]
#sous réserve qu'aucun répertoire ne 'match'
[System.IO.FileSystemInfo[]]$T=ls *.txt
$delegate= [System.Action[System.IO.FileSystemInfo]]{ param($item); Write-host $item.Name}
[System.Reflection.MethodInfo] $Methode = [System.Array].GetMethod(\"ForEach\"«»)
$MethodeGenerique = $Methode.MakeGenericMethod([System.IO.FileSystemInfo])
$MethodeGenerique.Invoke($null,@($T,$delegate))
[/code:1]
Comme tu peux, presque, le voir, on ne peut s'affranchir de l'itération de la collection.
\"Un\" et \"plusieurs\" sont deux concepts différent, donc pour répondre à ta question oui le foreach est obligatoire.
Ceci reste possible, mais on ne manipule plus que des string :
[code:1]
$ofs=\"`r`n\";\"$(ls *.txt).name\"
[/code:1]
Une question en amenant une autre, ici, je te laisserai creuser le pourquoi du comment
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 débutants
- ForEach est-il obligatoire