function - Powershell:返回函数中没有行的数据表

标签 function powershell return rows

我正在编写一个脚本,在其中创建许多自定义数据表,因此我想创建一个为我生成表的函数。具体来说,我希望该函数创建表和表的列,然后返回该表,以便调用函数可以将行元素添加到返回的表中。但是,每当我返回没有行的表时,我都会被告知无法向其中添加行,因为该元素为空。这是我到目前为止所尝试过的:

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

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

最佳答案

我认为只需在要返回的表格前面使用一元逗号运算符即可解决您的问题:

return ,$table

Powershell 对实现 IEnumerable 的集合进行了一些有趣的自动展开。逗号运算符会将表包装在单个对象数组中,因此当它自动展开时,它将返回到表。我不知道有什么方法可以强制 Powershell 不这样做。

这里是对 operators 的引用.

关于function - Powershell:返回函数中没有行的数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11562634/

相关文章:

javascript - 设置函数 javascript 的属性

function - 在 ComputerCraft 中使用 Lua 中的并行函数时的变量重置

powershell - 在 PowerShell 5 中访问 Outlook 文件夹

c - 如何从此函数中删除多个返回

c++ - 函数返回值的顺序

python - 具有多个返回选项的函数

javascript - 为什么语法 func1(func2)(parameters);工作,它叫什么?

powershell - Azure InvalidParameter : StorageProfile. dataDisks.lun 没有存储配置文件中图像所需的值

powershell - Get-ChildItem,通配符和过滤

c - 函数引用返回的变量给出了奇怪的值