PowerShellでデータセットをループする方法は?
-
03-07-2019 - |
質問
「非常に」を試しています。 DataSet
から各行の値を出力する単純なタスク:
for ($i=0;$i -le $ds.Tables[1].Rows.Count;$i++)
{
Write-Host 'value is : ' + $i + ' ' + $ds.Tables[1].Rows[$i][0]
}
出力を与える...
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]
列から実際の値を取得するにはどうすればよいですか
解決
PowerShell文字列評価は、DataSetでToString()を呼び出しています。プロパティ(またはメソッド呼び出し)を評価するには、 $()
for($i=0;$i -lt $ds.Tables[1].Rows.Count;$i++)
{
write-host "value is : $i $($ds.Tables[1].Rows[$i][0])"
}
さらに foreach
を使用すると、長さを計算する必要なくコレクションまたは配列を反復処理できます。
書き直し(およびコンパイル用に編集)-
foreach ($Row in $ds.Tables[1].Rows)
{
write-host "value is : $($Row[0])"
}
他のヒント
実際の例です(現在の場所からデータセットを構築します):
$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"] = 実際の例です(現在の場所からデータセットを構築します):
$ds.Tables["tblTest"] | foreach {
write-host 'Name value is : 実際の例です(現在の場所からデータセットを構築します):
$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"] = 実際の例です(現在の場所からデータセットを構築します):
<*>
$ ds.Tables [&quot; tblTest&quot;]
は、他のPowershellオブジェクトと同じように操作できるオブジェクトです。
<*>.name
$dr["Path"] = 実際の例です(現在の場所からデータセットを構築します):
<*>
$ ds.Tables [&quot; tblTest&quot;]
は、他のPowershellオブジェクトと同じように操作できるオブジェクトです。
<*>.fullname
$ds.Tables["tblTest"].Rows.Add($dr)
}
$ds.Tables["tblTest"]
$ ds.Tables [&quot; tblTest&quot;]
は、他のPowershellオブジェクトと同じように操作できるオブジェクトです。
<*>.name
write-host 'Path value is : 実際の例です(現在の場所からデータセットを構築します):
$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"] = 実際の例です(現在の場所からデータセットを構築します):
<*>
$ ds.Tables [&quot; tblTest&quot;]
は、他のPowershellオブジェクトと同じように操作できるオブジェクトです。
<*>.name
$dr["Path"] = 実際の例です(現在の場所からデータセットを構築します):
<*>
$ ds.Tables [&quot; tblTest&quot;]
は、他のPowershellオブジェクトと同じように操作できるオブジェクトです。
<*>.fullname
$ds.Tables["tblTest"].Rows.Add($dr)
}
$ds.Tables["tblTest"]
$ ds.Tables [&quot; tblTest&quot;]
は、他のPowershellオブジェクトと同じように操作できるオブジェクトです。
<*>.path
}
$ ds.Tables [&quot; tblTest&quot;]
は、他のPowershellオブジェクトと同じように操作できるオブジェクトです。
<*>.name
$dr["Path"] = 実際の例です(現在の場所からデータセットを構築します):
<*>
$ ds.Tables [&quot; tblTest&quot;]
は、他のPowershellオブジェクトと同じように操作できるオブジェクトです。
<*>.fullname
$ds.Tables["tblTest"].Rows.Add($dr)
}
$ds.Tables["tblTest"]
$ ds.Tables [&quot; tblTest&quot;]
は、他のPowershellオブジェクトと同じように操作できるオブジェクトです。
パーサーは、文字列の連結に問題があります。これを試してください:
write-host 'value is : '$i' '$($ds.Tables[1].Rows[$i][0])
編集:引用符で囲まれた文字列内に式を含めることができるため、二重引用符の使用もより明確になる場合があります。
write-host "value is : $i $($ds.Tables[1].Rows[$i][0])"