Question script qui fonctionne seulement en mode intéractif

Plus d'informations
il y a 13 ans 7 mois #12476 par rocchietta
Bonjour à tous.
je rencontre une erreur d'exécution avec un script mais seulement lorsque je le lance directement avec powershell.exe

J'obtiens une erreur \"impossible d'indexer dans un objet type System.Collection.arrayList\".

Voici un bout du code :

[code:1]
Get-ChildItem $Path -Recurse -Force | Where-Object {$_.Length -gt 0}| Select-Object Id,Name,Directory,Extension,Length,CreaztionTime,LastWriteTime,FullName,Hash | %{$_.Id='';$_.Hash=Get-MD5($_.FullName);$_} | export-csv -Path $Csv -encoding \"UTF8\" -notype
[/code:1]

Le plantage se fait lors de l'exécution de
[code:1]$_.Hash=Get-MD5($_.FullName)[/code:1].

Le script fonctionne très bien lorsqu'il est lancé en mode intéractif.

Quelqu'un pourrait-il m'orienter vers une explication ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 7 mois #12478 par Laurent Dardenne
Sous PS, l'appel de fonction n'utilise pas de parenthéses.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 7 mois #12479 par rocchietta
Le retrait des parenthèses ne résout pas l'erreur.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 7 mois #12480 par Matthew BETTON
Bonjour,

Get-ChildItem ne renvoie pas les propriétés 'Id' et 'Hash'. Ces propriétés n'existent pas sur l'objet 'System.IO.FileInfo'.

Il faut donc que tu les ajoutes au niveau du Select-Object (Name) et les calculer pour chaque fichier renvoyé par le pipeline (Expression) :

[code:1]
Get-ChildItem $Path -Recurse -Force | Where-Object {$_.Length -gt 0}| Select-Object @{Name=\"Id\";Expression={\"\"}},Name,Directory,Extension,Length,CreationTime,LastWriteTime,FullName,@{Name=\"Hash\";Expression={Get-MD5 $_.FullName}} | export-csv -Path $Csv -encoding \"UTF8\" -notype
[/code:1]

Je n'ai pas testé... Mais cela devrait fonctionner ;)

@ +

Matthew

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 7 mois #12481 par Laurent Dardenne
kortex écrit:

Le retrait des parenthèses ne résout pas l'erreur.

Peux nous communiquer le lien ou le code de la fonction Get-MD5 ?

Matthew, Select-Object construit un PSObject, donc pas de soucis pour les propriétés inexistantes sur l'objet source.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 7 mois #12483 par Matthew BETTON
Laurent Dardenne écrit:
Matthew, Select-Object construit un PSObject, donc pas de soucis pour les propriétés inexistantes sur l'objet source.[/quote]

Je le sais bien... Justement, le code fournie au départ par kortex ne permet pas d'ajouter de nouvelles propriétés :

[code:1] | %{$_.Id='';$_.Hash=Get-MD5 $_.FullName ;$_} | [/code:1]

D'après mes tests, pas d'erreur mais cela n'affiche rien...

Message édité par: Matthew BETTON, à: 8/08/12 11:22<br><br>Message édité par: Matthew BETTON, à: 8/08/12 11:24

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.052 secondes
Propulsé par Kunena