2012-07-19 55 views
3

我写一个剧本中,我使许多自定义数据表,基于这个原因,我想提出生成的表给我一个功能。具体来说,我希望函数来创建表与表的列,然后返回一个表,以便调用这个函数可以添加行元素返回的表。但是,每当我返回一个没有行的表时,我都被告知我不能添加行,因为元素是空的。以下是我迄今为止尝试:PowerShell的:返回的数据表,而不用在行功能

Function Generate-Table ($Name, [String[]]$ColumnNames, [Type[]]$DataTypes) { 
    $table = New-Object system.Data.DataTable "$Name" 

    for ($i = 0; $i -lt $ColumnNames.Length; $i++) { 
     $col = New-Object system.Data.DataColumn $ColumnNames[$i],($DataTypes[$i]) 
     $table.columns.add($col) 
    } 
    return $table 
} 

$ColumnNames = @("Name", "Age") 
$DataTypes = @([string], [int]) 
$table = Generate-Table "OutputTable" $ColumnNames $DataTypes 

$row = $table.NewRow(); 
$row.Name = "Bob" 
$row.Age = "20" 
$table.Rows.Add($row); 

$table 

这给我的错误:现在

You cannot call a method on a null-valued expression. 
At C:\Users\mrpadmin\accounting\test.ps1:15 char:21 
+ $row = $table.NewRow <<<<(); 
    + CategoryInfo   : InvalidOperation: (NewRow:String) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull 

,如果我这样做,而是将其替换线13:

. Generate-Table "OutputTable" $ColumnNames $DataTypes 

它正确地给我以下输出:

Name Age 
---- --- 
Bob  20 

有没有办法返回没有行的数据表对象?如果没有,是否有另一种方法来创建一个函数,可以返回数据表准备填充行?

回答

5

我觉得你的问题将只需使用一元逗号操作在您传回桌子前得到解决:

return ,$table 

PowerShell将是实现IEnumerable集合的一些有趣的自动展开。逗号操作员将包裹你的表单对象数组中,所以当它就会自动打开它会返回到表。我不知道强制Powershell不这样做的方法。

这里是将operators的参考。

+0

这完美的作品,太感谢你了。我永远都不会想到我自己。 – mrp 2012-07-20 06:37:22