J'essaie une tâche "très" simple pour sortir les valeurs de chaque ligne à partir d'un DataSet
:
for ($i=0;$i -le $ds.Tables[1].Rows.Count;$i++)
{
Write-Host 'value is : ' + $i + ' ' + $ds.Tables[1].Rows[$i][0]
}
donne une sortie ...
value is : +0+ +System.Data.DataSet.Tables[1].Rows[0][0]
value is : +1+ +System.Data.DataSet.Tables[1].Rows[1][0]
value is : +2+ +System.Data.DataSet.Tables[1].Rows[2][0]
value is : +3+ +System.Data.DataSet.Tables[1].Rows[3][0]
value is : +4+ +System.Data.DataSet.Tables[1].Rows[4][0]
value is : +5+ +System.Data.DataSet.Tables[1].Rows[5][0]
value is : +6+ +System.Data.DataSet.Tables[1].Rows[6][0]
Comment puis-je obtenir la valeur réelle de la colonne?
L'évaluation de chaîne PowerShell appelle ToString () sur le DataSet. Pour évaluer des propriétés (ou des appels de méthode), vous devez forcer l'évaluation en enfermant l'expression dans $()
for($i=0;$i -lt $ds.Tables[1].Rows.Count;$i++)
{
write-Host "value is : $i $($ds.Tables[1].Rows[$i][0])"
}
De plus, foreach
vous permet de parcourir une collection ou un tableau sans avoir à déterminer la longueur.
Réécrit (et édité pour la compilation) -
foreach ($Row in $ds.Tables[1].Rows)
{
write-Host "value is : $($Row[0])"
}
Voici un exemple pratique (créez un ensemble de données à partir de votre emplacement actuel):
$ds = new-object System.Data.DataSet
$ds.Tables.Add("tblTest")
[void]$ds.Tables["tblTest"].Columns.Add("Name",[string])
[void]$ds.Tables["tblTest"].Columns.Add("Path",[string])
dir | foreach {
$dr = $ds.Tables["tblTest"].NewRow()
$dr["Name"] = $_.name
$dr["Path"] = $_.fullname
$ds.Tables["tblTest"].Rows.Add($dr)
}
$ds.Tables["tblTest"]
$ds.Tables["tblTest"]
est un objet que vous pouvez manipuler comme n'importe quel autre objet Powershell:
$ds.Tables["tblTest"] | foreach {
write-Host 'Name value is : $_.name
write-Host 'Path value is : $_.path
}
L'analyseur a du mal à concaténer votre chaîne. Essaye ça:
write-Host 'value is : '$i' '$($ds.Tables[1].Rows[$i][0])
Edit: L'utilisation de guillemets doubles peut également être plus claire car vous pouvez inclure les expressions dans la chaîne entre guillemets:
write-Host "value is : $i $($ds.Tables[1].Rows[$i][0])"