Question Impossible de convertir la valeur"" en type .

Plus d'informations
il y a 10 ans 2 mois #21260 par Laurent Dardenne
serval13 écrit:

quelle serait alors la meilleure solution

Pour ce traitement, je te conseille de typer tes variables :
[code:1][String]$Str
[Int]$NombreCalculé= $Str * 1.5[/code:1]
Cela facilite la relecture en explicitant ce que le code récupère et manipule.
Ceci dit cela n'évitera pas une transformation de chaîne via un appel à Replace() ou autre.

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 2 mois #21262 par serval13
bon ben le replace fonctionne pas dans mon script

j'ai ajouter a mon code des balise avec des write-host

et dans les resultats je constate que les blanc ne sont pas supprimer

function Get-ClusterSummary {

$vm = @($cluster|Get-VM)
$objCluster.ClusterName = $cluster.Name
$objCluster.NumHost = `
$cluster.ExtensionData.Summary.NumHosts
$objCluster.NumVM = $vm.Count
$objCluster.NumDatastore = `
$cluster.ExtensionData.Datastore.Count
$objCluster.NumNetwork = `
$cluster.ExtensionData.Network.Count

$a = New-Object System.Globalization.CultureInfo(\"fr-FR\")
$objCluster.AssignedCpu = ($vm | Where {
$_.PowerState -eq \"PoweredOn\"} |
Measure-Object -Property NumCpu -Sum).Sum
$objCluster.NumCores = `
$cluster.ExtensionData.Summary.NumCpuCores
$objCluster.vCpuPerCore = \"{0:n0}\" -f ($objCluster.AssignedCpu / $objCluster.NumCores)
$objCluster.TotalCpuGhz = \"{0:n0}\" -f ($cluster.ExtensionData.Summary.TotalCpu / 1000)
$objCluster.TotalMemGB = \"{0:n0}\" -f ($cluster.ExtensionData.Summary.TotalMemory / 1GB )
$testmemgb=$objCluster.TotalMemGB
$objCluster.AssignedMemGB = \"{0:n0}\" -f (( $vm|Where {$_.PowerState -eq “PoweredOn”} | Measure-Object -Property MemoryMB -Sum ).Sum /1024)
write-host \"Avant :\" $testmemgb

$testmemgb1 = $testmemgb.replace(\" \", \"\")
write-host \"Apres :\" $testmemgb1

$objCluster
}
}





resultat

Avant : 2 112
Apres : 2 112
Avant : 256
Apres : 256
Avant : 512
Apres : 512
Avant : 768
Apres : 768
Avant : 448
Apres : 448
Avant : 512
Apres : 512
Avant : 448
Apres : 448
Avant : 512
Apres : 512


et en ligne de commande


'1 525'.replace(' ','')
1525<br><br>Message édité par: serval13, à: 14/01/16 12:12

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

Plus d'informations
il y a 10 ans 2 mois #21263 par Laurent Dardenne
Je n'ai pas de quoi tester ton code, mais l'appel à Replace() doit se faire avant le moindre calcul. On peut rencontrer ce type de pb lors de la lecture de cellule d'un classeur Excel.

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 2 mois #21264 par Laurent Dardenne
Vérifie la structure de ton objet $objCluster et le type de la propriété TotalMemGB

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 2 mois #21267 par Philippe
@Laurent :
pour te simplifié la vie pour les tests, j'ai réduit le code :

[code:1]$objCluster = “” | Select ClusterName, NumHost, NumVM, `
NumDatastore, NumNetwork, AssignedCpu, NumCores, `
vCpuPerCore, TotalCpuGHz, TotalMemGB, AssignedMemGB, `
MemUsagePct


$objCluster.TotalMemGB = “{0:n2}” -f (4398046511104 / 1GB«»)
$objCluster.AssignedMemGB = “{0:n2}” -f (3980024 / 1024)
$objCluster.MemUsagePct = “{0:«»p2}” -f ($objCluster.AssignedMemGB / $objCluster.TotalMemGB«»)

$objCluster.AssignedMemGB.Replace(' ', '')
# donne : 3 886,74
[/code:1]

la conversion ne fonctionne pas avec todecimal() ou autre !
c'est pourtant bien un string
j'ai testé en V2 au cas ou ce serait un bug v4 mais idem !
peut-être un problème de culture ?
et le remplace ne fonctionne pas non plus ???? :evil:

pour info :
le code complet est accessible ici

le livre est ici et ensemble des sources sont là

Message édité par: 6ratgus, à: 14/01/16 15:23<br><br>Message édité par: 6ratgus, à: 14/01/16 15:24

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

Plus d'informations
il y a 10 ans 2 mois #21270 par Laurent Dardenne
Peut être un pb d'encodage de l'éditeur :
Que donne ceci :
[code:1]
[byte[]][char[]]$objCluster.AssignedMemGB
[/code:1]
Ou de formatage :
[code:1]$s=\&quot;{0:n2}\&quot; -f (3980024 / 1024)
[byte[]][char[]]$s[/code:1]
Renvoi 160 et pas 32 :P
[code:1]
$S=[Math]::Round(3980024 / 1024,2)
[byte[]][char[]]$S[/code:1]
Renvoi un entier, plus de pb...<br><br>Message édité par: Laurent Dardenne, à: 14/01/16 15:44

Tutoriels PowerShell

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

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