Wie durch einen Datensatz in Powershell-Schleife?
-
03-07-2019 - |
Frage
Ich versuche, eine „sehr“ einfache Aufgabe zu Ausgangswerten der einzelnen Zeilen aus einer DataSet
:
for ($i=0;$i -le $ds.Tables[1].Rows.Count;$i++)
{
Write-Host 'value is : ' + $i + ' ' + $ds.Tables[1].Rows[$i][0]
}
gibt Ausgang ...
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]
Wie kann ich den aktuellen Wert aus der Spalte zu bekommen?
Lösung
Die Powershell-String Auswertung ruft ToString () auf dem DataSet. Um alle Eigenschaften (oder Methodenaufrufe) zu bewerten, müssen Sie Auswertung erzwingen, indem Sie den Ausdruck in $()
umschließenden
for($i=0;$i -lt $ds.Tables[1].Rows.Count;$i++)
{
write-host "value is : $i $($ds.Tables[1].Rows[$i][0])"
}
Zusätzlich foreach
können Sie durch eine Sammlung oder Array zu durchlaufen, ohne dass die Länge zu verstehen.
neu geschrieben (und bearbeitet für Kompilierung) -
foreach ($Row in $ds.Tables[1].Rows)
{
write-host "value is : $($Row[0])"
}
Andere Tipps
Hier ist ein praktisches Beispiel (einen Datensatz von Ihrem aktuellen Standort bauen):
$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"]
ist ein Objekt, das Sie wie jedes andere Objekt Powershell manipulieren kann:
$ds.Tables["tblTest"] | foreach {
write-host 'Name value is : $_.name
write-host 'Path value is : $_.path
}
Der Parser hat Probleme verketten Zeichenfolge. Versuchen Sie folgendes:
write-host 'value is : '$i' '$($ds.Tables[1].Rows[$i][0])
Edit: doppelte Anführungszeichen verwendet, kann auch klarer sein, da Sie die Ausdrücke innerhalb der Zeichenfolge in Anführungszeichen enthalten können:
write-host "value is : $i $($ds.Tables[1].Rows[$i][0])"