Question Typage PSObject

Plus d'informations
il y a 13 ans 2 mois #13443 par Nicolas
Typage PSObject a été créé par Nicolas
Bonjour à tous,

Et oui je suis déjà de retour :P

Je suis face a un petit problème technique pour mon script :(

Je souhaite modifié une variable sur un PSO importé depuis un fichier csv . Cependant mon variable est toujours interpreté comme un string même si je force son type avant.

Un petit exemple pour completer tout ça ;)

[code:1]
#l'index transmit a cette fonction correspond au numéro de la ligne de l'IP dans le fichier csv
function ajoutcompteur ($index)
{
#j'initialise mon tableau et j'importe mon fichier csv
$liste = @()
$liste = Import-Csv c:\temp\ip.csv

#je force le typage de ma variable par un [INT]
[INT]$compteur = $liste[1].compteur

#je lui ajoute 1
[INT]$compteur =+ 1
}[/code:1]

Mon fichier csv se présente sous cete forme

[code:1]IP,compteur
192.168.1.1,1
10.10.10.1,3[/code:1]

Aussi j'ai remarqué que quand je fais passer mon fichier csv dans ma variable et que je l'export a nouveau dans mon fichier celui ici était modifié (rajout de guillement entre les éléments, saut de ligne)

Merci d'avance pour vos réponse

et Joyeux noel :p

Nico

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

Plus d'informations
il y a 13 ans 2 mois #13444 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Typage PSObject
Salut,
Zarko écrit:

Cependant mon variable est toujours interpreté comme un string même si je force son type avant.

Je n'ai pas compris ton pb au vu du code :/
Un PSObject issu d'un import-csv possédera des membres de type string, il n'y aucune information de type dans cette structure (CSV).
Si tu veux garder les types liés à la structure de ton objet, il te faut construire un objet personnalisé avec des membres typés, puis les sérialiser avec le cmdlet Export-CliXML.
Zarko écrit:

Un petit exemple pour completer tout ça ;)
[code:1]
[INT]$compteur += 1
}[/code:1]

Cette ligne est fausse, car ici tu affectes la valeur UN positif
Avec += c+ mieux.
Zarko écrit:

celui ici était modifié (rajout de guillement entre les éléments, saut de ligne)

C'est normal, tu peux avoir des types double (3,2) et des membres contenant des espaces. C'est un délimiteur de champs normé.
Zarko écrit:

et Joyeux noel :p

Merci à toi aussi :)

Tutoriels PowerShell

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

Plus d'informations
il y a 13 ans 2 mois #13446 par Nicolas
Réponse de Nicolas sur le sujet Re:Typage PSObject
Bonjour et merci de ta réponse ,

En faite mon problème c'est que je dois incrémenter cette variable de 1 d'ou le += car si je fais

[code:1]$i = \"1\"
$i += 1
[/code:1]

$i sera égal a 2 non ?

cependant si je le fais dans mon script $i est égale a 11 puis 111 etc ...

voici l'erreur que j'obtiens

[code:1]Unable to index into an object of type System.Management.Automation.PSObject.
At line:6 char:29
+ [INT]$compteur = $liste[ <<<< 1].compteur
+ CategoryInfo : InvalidOperation: (1:Int32) [], RuntimeException
+ FullyQualifiedErrorId : CannotIndex[/code:1]

Merci d'avance

Nico<br><br>Message édité par: Zarko, à: 25/12/12 18:15

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

Plus d'informations
il y a 13 ans 2 mois #13447 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Typage PSObject
Zarko écrit:

cependant si je le fais dans mon script $i est égale a 11 puis 111 etc ...

Oui, car dans ton code la variable $Compteur est de type string. Le + est donc dans ce cas une concaténation de chaîne de caractères et pas une addition d'entier.

Essai ceci :
[code:1]
function ajoutcompteur ($Index)
{
#j'importe mon fichier csv, le résultat sera tjr un tableau
$liste = @(Import-Csv c:\temp\ip.csv)

#je force le typage de ma variable par un [INT]
[INT]$compteur = $liste[$Index].compteur

#je lui ajoute 1
$compteur++
Write-host \&quot;Compteur= $Compteur\&quot;
return $compteur
}
$NouveauCompteur =AjoutCompteur 1
$NouveauCompteur
[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 26/12/12 11:07

Tutoriels PowerShell

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

Plus d'informations
il y a 13 ans 2 mois #13454 par Nicolas
Réponse de Nicolas sur le sujet Re:Typage PSObject
Bonjour merci de pour ton code qui fonctionne a merveille.

Donc si j'ai bien comprit += concaténation
et ++ égal incrémentation ? :)

Merci pour t'es réponses et du temps que tu y as consacré.

Nico

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

Plus d'informations
il y a 13 ans 2 mois #13457 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Typage PSObject
Zarko écrit:

Donc si j'ai bien comprit += concaténation

Oui, mais cela dépend du type, car sur un entier il y a bien une incrémentation.
Zarko écrit:

et ++ égal incrémentation

Oui. Et sur une chaîne de caractères le parseur renvoit une erreur explicite :
[code:1]$s=\&quot;test\&quot;
$s++
L'opérateur « ++ » ne fonctionne que sur les nombres. L'opérande est un « System.String ».
[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 27/12/12 13:11

Tutoriels PowerShell

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

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