3

多くのカスタム データ テーブルを作成するスクリプトを書いています。このため、テーブルを生成する関数を作成したいと考えています。具体的には、関数でテーブルとテーブルの列を作成し、そのテーブルを返して、呼び出し元の関数が返されたテーブルに行要素を追加できるようにしたいと考えています。ただし、行のないテーブルを返すたびに、要素が空であるため、行を追加できないと言われます。これが私がこれまでに試したことです:

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

行のないデータ テーブル オブジェクトを返す方法はありますか? そうでない場合、データテーブルを行で満たす準備ができていることを返すことができる関数を作成する別の方法はありますか?

4

1 に答える 1

5

返されるテーブルの前に単項カンマ演算子を使用するだけで、問題は解決すると思います。

return ,$table

Powershell は、IEnumerable を実装するコレクションの興味深い自動展開を行います。コンマ演算子はテーブルを単一オブジェクト配列にラップするため、自動的に展開されるとテーブルに戻ります。Powershell にこれを行わせないようにする方法がわかりません。

演算子への参照は次のとおりです。

于 2012-07-19T16:07:14.923 に答える