Question
[résolu] foreach
- ZOKI
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 19
- Remerciements reçus 0
il y a 12 ans 3 mois #16642
par ZOKI
[résolu] foreach a été créé par ZOKI
bonjour à tous.
j'essaie de me lancer des défis pour mesurer mes progrès. (pas terribles pour le moment
)
je bute sur cet exercice personnel.
voilà j'ai trouvé ce code qui m'a paru intéressant
[code:1]
$i=0; gci c:\addons -Recurse -Force | foreach -Process {$i+=$_.Length} ; $i
[/code:1]
Je me suis dit que cela pourrait être intéressant de voir la taille par sous-dossier (de premier niveau).
autrement dit, le dossier addons contient 2 sous-dossiers. j'aimerais avoir la taille des ces deux sous-dossiers.
cela ne me parait pas très compliqué sauf que le résultat n'est pas du tout ce que j'espérais
[code:1]
$dossier = \"c:\addons\"
Get-ChildItem $dossier | Where-Object {$_.psiscontainer -eq 1}
foreach ($element in $dossier)
{
$i=0 ; gci -path $element -Force -Recurse | foreach -Process {$i+=$_.Length} ; $i
}
[/code:1]
pour moi, ca veut dire : pour tous les éléments du dossier c:\addons, additionne la taille des éléments les composant.
mais malheureusement, il me donne comme résultat la taille totale.
je m'y prends mal, mais je ne vois pas comment me sortir d'affaire.
si vous pouviez m'éclairer et m'expliquer pourquoi la voie choisie n'est pas la bonne.
merci<br><br>Message édité par: nzo, à: 19/12/13 21:09
j'essaie de me lancer des défis pour mesurer mes progrès. (pas terribles pour le moment
je bute sur cet exercice personnel.
voilà j'ai trouvé ce code qui m'a paru intéressant
[code:1]
$i=0; gci c:\addons -Recurse -Force | foreach -Process {$i+=$_.Length} ; $i
[/code:1]
Je me suis dit que cela pourrait être intéressant de voir la taille par sous-dossier (de premier niveau).
autrement dit, le dossier addons contient 2 sous-dossiers. j'aimerais avoir la taille des ces deux sous-dossiers.
cela ne me parait pas très compliqué sauf que le résultat n'est pas du tout ce que j'espérais
[code:1]
$dossier = \"c:\addons\"
Get-ChildItem $dossier | Where-Object {$_.psiscontainer -eq 1}
foreach ($element in $dossier)
{
$i=0 ; gci -path $element -Force -Recurse | foreach -Process {$i+=$_.Length} ; $i
}
[/code:1]
pour moi, ca veut dire : pour tous les éléments du dossier c:\addons, additionne la taille des éléments les composant.
mais malheureusement, il me donne comme résultat la taille totale.
je m'y prends mal, mais je ne vois pas comment me sortir d'affaire.
si vous pouviez m'éclairer et m'expliquer pourquoi la voie choisie n'est pas la bonne.
merci<br><br>Message édité par: nzo, à: 19/12/13 21:09
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 12 ans 3 mois #16648
par Philippe
Réponse de Philippe sur le sujet Re:foreach
bonjour nzo
déjà la présentation du code va t'aidé a voir tes problèmes :
[code:1]$dossier = \"c:\addons\"
Get-ChildItem $dossier | Where-Object {$_.psiscontainer -eq 1}
foreach ($element in $dossier)
{
$i=0
Get-ChildItem -path $element -Force -Recurse |
foreach { $i += $_.Length }
$i
}
[/code:1]
de plus ton script n'est valable que pour un seul niveau d'arboresence !!
la suite des explication arrive dans l'après midi, suivant ma dispo !
a moins qu'une autre personne ne soit dispo et prêt a repondre
Message édité par: 6ratgus, à: 19/12/13 15:00<br><br>Message édité par: 6ratgus, à: 19/12/13 15:22
déjà la présentation du code va t'aidé a voir tes problèmes :
[code:1]$dossier = \"c:\addons\"
Get-ChildItem $dossier | Where-Object {$_.psiscontainer -eq 1}
foreach ($element in $dossier)
{
$i=0
Get-ChildItem -path $element -Force -Recurse |
foreach { $i += $_.Length }
$i
}
[/code:1]
de plus ton script n'est valable que pour un seul niveau d'arboresence !!
la suite des explication arrive dans l'après midi, suivant ma dispo !
a moins qu'une autre personne ne soit dispo et prêt a repondre
Message édité par: 6ratgus, à: 19/12/13 15:00<br><br>Message édité par: 6ratgus, à: 19/12/13 15:22
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 12 ans 3 mois #16649
par Philippe
Réponse de Philippe sur le sujet Re:foreach
premiere etape : la liste des dossiers de addons
[code:1]$dossier = \"c:\addons\"
Get-ChildItem $dossier | Where-Object {$_.psiscontainer -eq 1}[/code:1]
il maque quelque chose ! ou ce trouve la liste des dossiers de \"addons\" ? dans quel variable ?
nul part, tu aussi peut la transfère par pipeline \"|\" mais tu la pas fais !
solution 1 \"la variable\" :
[code:1]$dossier = \"c:\addons\"
$dossiers = Get-ChildItem $dossier | Where-Object {$_.psiscontainer -eq 1}[/code:1]
solution 2 \"le pipeline\" :
[code:1]$dossier = \"c:\addons\"
Get-ChildItem $dossier | Where-Object {$_.psiscontainer -eq 1} |
foreach {
....
[/code:1]
dans le premier exemple ta variable contient un objet de type : System.IO.DirectoryInfo objet de definition d'un dossier
ici c'est un tableau d'objet puisse qu'il y a plusieurs dossiers
dans le deuxieme exemple il transfère l'objet directement à foreach via le pipeline
tu coup tu pourra l'utilisé pour le Get-ChildItem .... avece quel parametre ?
un indice :
[code:1]$element |Format-List -property *[/code:1]<br><br>Message édité par: 6ratgus, à: 19/12/13 15:26
[code:1]$dossier = \"c:\addons\"
Get-ChildItem $dossier | Where-Object {$_.psiscontainer -eq 1}[/code:1]
il maque quelque chose ! ou ce trouve la liste des dossiers de \"addons\" ? dans quel variable ?
nul part, tu aussi peut la transfère par pipeline \"|\" mais tu la pas fais !
solution 1 \"la variable\" :
[code:1]$dossier = \"c:\addons\"
$dossiers = Get-ChildItem $dossier | Where-Object {$_.psiscontainer -eq 1}[/code:1]
solution 2 \"le pipeline\" :
[code:1]$dossier = \"c:\addons\"
Get-ChildItem $dossier | Where-Object {$_.psiscontainer -eq 1} |
foreach {
....
[/code:1]
dans le premier exemple ta variable contient un objet de type : System.IO.DirectoryInfo objet de definition d'un dossier
ici c'est un tableau d'objet puisse qu'il y a plusieurs dossiers
dans le deuxieme exemple il transfère l'objet directement à foreach via le pipeline
tu coup tu pourra l'utilisé pour le Get-ChildItem .... avece quel parametre ?
un indice :
[code:1]$element |Format-List -property *[/code:1]<br><br>Message édité par: 6ratgus, à: 19/12/13 15:26
Connexion ou Créer un compte pour participer à la conversation.
- ZOKI
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 19
- Remerciements reçus 0
il y a 12 ans 3 mois #16652
par ZOKI
Réponse de ZOKI sur le sujet Re:foreach
merci 6ratgus
voici le code modifié
[code:1]
cls
$dossier = \"c:\addons\"
$dossier = Get-ChildItem $dossier | Where-Object {$_.psiscontainer -eq 1}
@(
foreach ($element in $dossier)
{
$i=0
Get-ChildItem -path $element.FullName -Force -Recurse |
foreach { $i += $_.Length }
$i
}
)
[/code:1]
ce qui m'a mis sur la voie c'est
\"dans le premier exemple ta variable contient un objet de type : System.IO.DirectoryInfo objet de definition d'un dossier ici c'est un tableau d'objet puisse qu'il y a plusieurs dossiers\"
mais ce que j'aimerais comprendre c'est
[code:1]
$element |Format-List -property *
[/code:1]
comment les propriétés de $element auraient-elles pu m'aider ?
que dois-je voir dans cet indice
voici le code modifié
[code:1]
cls
$dossier = \"c:\addons\"
$dossier = Get-ChildItem $dossier | Where-Object {$_.psiscontainer -eq 1}
@(
foreach ($element in $dossier)
{
$i=0
Get-ChildItem -path $element.FullName -Force -Recurse |
foreach { $i += $_.Length }
$i
}
)
[/code:1]
ce qui m'a mis sur la voie c'est
\"dans le premier exemple ta variable contient un objet de type : System.IO.DirectoryInfo objet de definition d'un dossier ici c'est un tableau d'objet puisse qu'il y a plusieurs dossiers\"
mais ce que j'aimerais comprendre c'est
[code:1]
$element |Format-List -property *
[/code:1]
comment les propriétés de $element auraient-elles pu m'aider ?
que dois-je voir dans cet indice
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 12 ans 3 mois #16653
par Philippe
Réponse de Philippe sur le sujet Re:foreach
argh 
une question d'abord : quel version de powershell tu utilise ?
$PSVersionTable.PSVersion
une question d'abord : quel version de powershell tu utilise ?
$PSVersionTable.PSVersion
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 12 ans 3 mois #16655
par Philippe
Réponse de Philippe sur le sujet Re:foreach
pardon, j'oublie toujours que mon powershell a un probleme d'install
quand j'utilise ton script j'ai :
La propriété « Length » est introuvable sur cet objet. Vérifiez qu'elle existe. pour chaque dossier
j'ai donc tester sur un autre ordi est tout va bien !!!
pour l'indice tu la trouver : la propriété fullname
par contre pourquoi tu utilise le @() ?
quand j'utilise ton script j'ai :
La propriété « Length » est introuvable sur cet objet. Vérifiez qu'elle existe. pour chaque dossier
j'ai donc tester sur un autre ordi est tout va bien !!!
pour l'indice tu la trouver : la propriété fullname
par contre pourquoi tu utilise le @() ?
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.052 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [résolu] foreach