多くのカスタム データ テーブルを作成するスクリプトを書いています。このため、テーブルを生成する関数を作成したいと考えています。具体的には、関数でテーブルとテーブルの列を作成し、そのテーブルを返して、呼び出し元の関数が返されたテーブルに行要素を追加できるようにしたいと考えています。ただし、行のないテーブルを返すたびに、要素が空であるため、行を追加できないと言われます。これが私がこれまでに試したことです:
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
行のないデータ テーブル オブジェクトを返す方法はありますか? そうでない場合、データテーブルを行で満たす準備ができていることを返すことができる関数を作成する別の方法はありますか?