Question
qui veux mettre la main dans la corbeille
- jojo
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 187
- Remerciements reçus 0
il y a 15 ans 3 mois #8162
par jojo
Réponse de jojo sur le sujet Re:qui veux mettre la main dans la corbeille
merci janel pour ton aide et ton code,
j'ai executer ton code dans mon ISE et ça me retourne cette erreur: (j'ai un xp et un ps v2)
[code:1]Add-Member : Impossible de lier l'argument au paramètre « InputObject », car il a la valeur Null.
Au niveau de ligne : 14 Caractère : 27
+ $item = add-member -in <<<< $item NoteProperty $PropertyName $PropertyValue -passthru
+ CategoryInfo : InvalidData: (:«») [Add-Member], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.
AddMemberCommand[/code:1]
si tu permet j'ai une autre question, pourquoi tu utilise le cmdlet add-member et tu ne créer pas directement un hashtable, es-ce que c'est plus adapter dans une boucle ou c'est autre chose
j'ai essayer de faire la même chose que toi mais sans reussite.. j'admet que je suis plus halaise avec les shells *nux que powershell
[code:1] $comobj = new-object -com \"Shell.Application\"
$nms=$comobj.Namespace(10)
$hash=@{}
$t=0
ForEach($item in $nms.Items()) {
$s=0
While($s -lt 14) {
$name = $nms.GetDetailsOf($nms, $s)
$value = $nms.GetDetailsOf($item, $s)
$hash[$name][$t]=$value
$s++
}
$t++
}
[/code:1]
merci<br><br>Message édité par: jojo, à: 30/11/10 10:50
j'ai executer ton code dans mon ISE et ça me retourne cette erreur: (j'ai un xp et un ps v2)
[code:1]Add-Member : Impossible de lier l'argument au paramètre « InputObject », car il a la valeur Null.
Au niveau de ligne : 14 Caractère : 27
+ $item = add-member -in <<<< $item NoteProperty $PropertyName $PropertyValue -passthru
+ CategoryInfo : InvalidData: (:«») [Add-Member], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.
AddMemberCommand[/code:1]
si tu permet j'ai une autre question, pourquoi tu utilise le cmdlet add-member et tu ne créer pas directement un hashtable, es-ce que c'est plus adapter dans une boucle ou c'est autre chose
j'ai essayer de faire la même chose que toi mais sans reussite.. j'admet que je suis plus halaise avec les shells *nux que powershell
[code:1] $comobj = new-object -com \"Shell.Application\"
$nms=$comobj.Namespace(10)
$hash=@{}
$t=0
ForEach($item in $nms.Items()) {
$s=0
While($s -lt 14) {
$name = $nms.GetDetailsOf($nms, $s)
$value = $nms.GetDetailsOf($item, $s)
$hash[$name][$t]=$value
$s++
}
$t++
}
[/code:1]
merci<br><br>Message édité par: jojo, à: 30/11/10 10:50
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 15 ans 3 mois #8172
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:qui veux mettre la main dans la corbeille
Je ne suis pas devant le poste en W7 que j'ai utilisé pour écrire mon script, mais en effet j'ai la même erreur sur le poste que j'ai aujourd'hui et c'est également un XP. Coïncidence ?
En tout cas, ça marche si je rajoute le paramètre -force à la commande add-member. Regarde si ça règle le problème pour toi également.
Je mettrai à jour le script publié.
Concernant ta question : une hashtable n'offre pas du tout les mêmes fonctionnalités.
Principale différence pour l'exemple qui nous intéresse ici : une hashtable stocke son contenu sous la forme clé=valeur. Dans ton analogie, tu traites donc chaque propriété comme une clé. Ok, mais ce concept de clés alourdit énormément l'énumération de plusieurs objets en ne sélectionnant que certaines propriétés (certaines clés donc), et rend très complexes les calculs sur ces propriétés.
Au passage, je ne suis pas sûr de comprendre comment ton tableau de hashtables marche. Tu utilises la notation $hash[$name][$t] = $value pour affecter $value à la clé $name de la hashtable d'indice $t, ça marche sur ton poste ?
Voici une version corrigée de ton code qui marche sur mon poste, mais avec la grosse limitation que je mentionnais ci-dessus concernant la possibilité de \"jouer\" avec les propriétés des objets :
[code:1]
$comobj = new-object -com \"Shell.Application\"
$nms=$comobj.Namespace(10)
# déclaration d'un tableau de hashtables :
$hash = @(@{})
ForEach ($item in $nms.Items())
{
$s=0
While($s -lt 14) {
$name = $nms.GetDetailsOf($nms, $s)
$value = $nms.GetDetailsOf($item, $s)
# affectation d'une nouvelle hashtable au tableau :
$hash += @{$name=$value}
$s++
}
}
# émission du tableau :
$hash
[/code:1]
En tout cas, ça marche si je rajoute le paramètre -force à la commande add-member. Regarde si ça règle le problème pour toi également.
Je mettrai à jour le script publié.
Concernant ta question : une hashtable n'offre pas du tout les mêmes fonctionnalités.
Principale différence pour l'exemple qui nous intéresse ici : une hashtable stocke son contenu sous la forme clé=valeur. Dans ton analogie, tu traites donc chaque propriété comme une clé. Ok, mais ce concept de clés alourdit énormément l'énumération de plusieurs objets en ne sélectionnant que certaines propriétés (certaines clés donc), et rend très complexes les calculs sur ces propriétés.
Au passage, je ne suis pas sûr de comprendre comment ton tableau de hashtables marche. Tu utilises la notation $hash[$name][$t] = $value pour affecter $value à la clé $name de la hashtable d'indice $t, ça marche sur ton poste ?
Voici une version corrigée de ton code qui marche sur mon poste, mais avec la grosse limitation que je mentionnais ci-dessus concernant la possibilité de \"jouer\" avec les propriétés des objets :
[code:1]
$comobj = new-object -com \"Shell.Application\"
$nms=$comobj.Namespace(10)
# déclaration d'un tableau de hashtables :
$hash = @(@{})
ForEach ($item in $nms.Items())
{
$s=0
While($s -lt 14) {
$name = $nms.GetDetailsOf($nms, $s)
$value = $nms.GetDetailsOf($item, $s)
# affectation d'une nouvelle hashtable au tableau :
$hash += @{$name=$value}
$s++
}
}
# émission du tableau :
$hash
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.034 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- qui veux mettre la main dans la corbeille