Comment parcourir en boucle un jeu de données dans powershell?
-
03-07-2019 - |
Question
J'essaie un " très " tâche simple pour afficher 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 la 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?
La solution
L'évaluation de la 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 entourant 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])"
}
Autres conseils
Voici un exemple pratique (construire un jeu 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"] = Voici un exemple pratique (construire un jeu de données à partir de votre emplacement actuel):
$ds.Tables["tblTest"] | foreach {
write-host 'Name value is : Voici un exemple pratique (construire un jeu 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"] = Voici un exemple pratique (construire un jeu de données à partir de votre emplacement actuel):
<*>
$ ds.Tables [" tblTest &];
est un objet que vous pouvez manipuler comme n'importe quel autre objet Powershell:
<*>.name
$dr["Path"] = Voici un exemple pratique (construire un jeu de données à partir de votre emplacement actuel):
<*>
$ ds.Tables [" tblTest &];
est un objet que vous pouvez manipuler comme n'importe quel autre objet Powershell:
<*>.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:
<*>.name
write-host 'Path value is : Voici un exemple pratique (construire un jeu 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"] = Voici un exemple pratique (construire un jeu de données à partir de votre emplacement actuel):
<*>
$ ds.Tables [" tblTest &];
est un objet que vous pouvez manipuler comme n'importe quel autre objet Powershell:
<*>.name
$dr["Path"] = Voici un exemple pratique (construire un jeu de données à partir de votre emplacement actuel):
<*>
$ ds.Tables [" tblTest &];
est un objet que vous pouvez manipuler comme n'importe quel autre objet Powershell:
<*>.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:
<*>.path
}
$ ds.Tables [" tblTest &];
est un objet que vous pouvez manipuler comme n'importe quel autre objet Powershell:
<*>.name
$dr["Path"] = Voici un exemple pratique (construire un jeu de données à partir de votre emplacement actuel):
<*>
$ ds.Tables [" tblTest &];
est un objet que vous pouvez manipuler comme n'importe quel autre objet Powershell:
<*>.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:
L’analyseur a du mal à concaténer votre chaîne. Essayez ceci:
write-host 'value is : '$i' '$($ds.Tables[1].Rows[$i][0])
Modifier: L'utilisation de guillemets doubles peut également être plus claire, car vous pouvez inclure les expressions dans la chaîne citée:
write-host "value is : $i $($ds.Tables[1].Rows[$i][0])"