Question
Typage PSObject
- Nicolas
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 27
- Remerciements reçus 0
Et oui je suis déjà de retour
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
Nico
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Zarko écrit:
Je n'ai pas compris ton pb au vu du code :/Cependant mon variable est toujours interpreté comme un string même si je force son type avant.
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:
Cette ligne est fausse, car ici tu affectes la valeur UN positifUn petit exemple pour completer tout ça
[code:1]
[INT]$compteur += 1
}[/code:1]
Avec += c+ mieux.
Zarko écrit:
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é.celui ici était modifié (rajout de guillement entre les éléments, saut de ligne)
Zarko écrit:
Merci à toi aussiet Joyeux noel
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Nicolas
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 27
- Remerciements reçus 0
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
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.cependant si je le fais dans mon script $i est égale a 11 puis 111 etc ...
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 \"Compteur= $Compteur\"
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.
- Nicolas
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 27
- Remerciements reçus 0
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Oui, mais cela dépend du type, car sur un entier il y a bien une incrémentation.Donc si j'ai bien comprit += concaténation
Zarko écrit:
Oui. Et sur une chaîne de caractères le parseur renvoit une erreur explicite :et ++ égal incrémentation
[code:1]$s=\"test\"
$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.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Typage PSObject