我正在尝试“非常”从 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])"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top