PowerShell函数不会返回DataTable

时间:2016-02-18 20:06:15

标签: powershell datatable

我在PowerShell v4.0(Windows 7 x64 SP1)上有一个PowerShell脚本,它创建了一个非常复杂的DataTable。我希望能够很容易地将DataTable代码放在任何地方,所以我决定将它包装在一个简单的函数中,如下所示:

function Get-UserDataTable
{
    $DataTable = New-Object -TypeName System.Data.DataTable -ArgumentList 'User';

    $NewColumn = $DataTable.Columns.Add('Id',[System.Int32]);
    $NewColumn.AllowDBNull = $false;
    $NewColumn.Unique = $true;

    $NewColumn = $DataTable.Columns.Add('FirstName',[System.String]);
    $NewColumn.MaxLength = 64;

    $NewColumn = $DataTable.Columns.Add('MiddleName',[System.String]);
    $NewColumn.MaxLength = 64;

    $NewColumn = $DataTable.Columns.Add('LastName',[System.String]);
    $NewColumn.MaxLength = 64;

    return $DataTable;
}

但是,该代码始终返回一个null对象。我尝试了Write-Output $DataTablereturn $DataTable.Copy()$DataTable,但该函数仍然是null。

所以,我想我可能会尝试添加一些行。我总是可以清除DataTable,它仍然可以用这种方式编写代码:

function Get-UserDataTable2
{
    $DataTable = New-Object -TypeName System.Data.DataTable -ArgumentList 'User';

    $NewColumn = $DataTable.Columns.Add('Id',[System.Int32]);
    $NewColumn.AllowDBNull = $false;
    $NewColumn.Unique = $true;

    $NewColumn = $DataTable.Columns.Add('FirstName',[System.String]);
    $NewColumn.MaxLength = 64;

    $NewColumn = $DataTable.Columns.Add('MiddleName',[System.String]);
    $NewColumn.MaxLength = 64;

    $NewColumn = $DataTable.Columns.Add('LastName',[System.String]);
    $NewColumn.MaxLength = 64;

    $NewRow = $DataTable.NewRow();
    $NewRow.Id = 1;
    $NewRow.FirstName = 'Test';
    $NewRow.MiddleName = '';
    $NewRow.LastName = 'User';

    $DataTable.Rows.Add($NewRow);

    $NewRow = $DataTable.NewRow();
    $NewRow.Id = 2;
    $NewRow.FirstName = 'Other';
    $NewRow.MiddleName = 'Test';
    $NewRow.LastName = 'User';

    $DataTable.Rows.Add($NewRow);

    return $DataTable;
}

不。此函数返回包含个人[System.Object[]]的{​​{1}}。 DataRows的对象数组。

如何从PowerShell中的函数返回DataTable?

2 个答案:

答案 0 :(得分:3)

正如PerSerAl评论中的链接所示,问题是因为DataTable不是可枚举的数据类型。要强制它可枚举,可以使用一元逗号运算符将其作为单个元素放入数组中。数组 可枚举。

function Get-UserDataTable
{
    $DataTable = New-Object -TypeName System.Data.DataTable -ArgumentList 'User';

    $NewColumn = $DataTable.Columns.Add('Id',[System.Int32]);
    $NewColumn.AllowDBNull = $false;
    $NewColumn.Unique = $true;

    $NewColumn = $DataTable.Columns.Add('FirstName',[System.String]);
    $NewColumn.MaxLength = 64;

    $NewColumn = $DataTable.Columns.Add('MiddleName',[System.String]);
    $NewColumn.MaxLength = 64;

    $NewColumn = $DataTable.Columns.Add('LastName',[System.String]);
    $NewColumn.MaxLength = 64;

    return ,$DataTable;
}

答案 1 :(得分:0)

  

这个问题看起来像一个duplicate for this one,但您可能希望查看有关that answer & below的更为详尽的信息。