选择多个属性的对象

时间:2017-05-23 18:45:35

标签: powershell

我试图找到一种优雅的方法将System.Data.DataTable类型的表的元数据放入一个多维数组中,以便在我的程序中轻松引用。我是powershell的新手,到目前为止我对这个问题的态度是笨拙乏味的。

假设$ DataTable是有问题的DataTable

到目前为止我尝试做的是:

$Types = $DataTable.Columns | Select-Object -Property DataType
$Columns= $DataTable.Columns | Select-Object -Property ColumnName
$Index = $DataTable.Columns | Select-Object -Property ordinal
$AllowNull  = $DataTable.Columns | Select-Object -Property AllowDbNull

然后痛苦地遍历每个数组,拾取单个项目并将它们放入我的多维数组$ TableMetaData。

我阅读了Select-Object的文档,在我看来,一次只能选择1个属性?我想我应该能够更优雅地完成上述所有工作并将信息存储在$ TableMetaData中。

有没有办法轻松获取多个属性并将它们一次性放入多维数组?

1 个答案:

答案 0 :(得分:4)

  

我阅读了Select-Object的文档,在我看来,一次只能选择1个属性?

事实并非如此,Select-Object可以为-Property参数提取任意数量的参数

$ColumnInfo = $DataTable.Columns | Select-Object -Property DataType,ColumnName,ordinal,AllowDbNull

现在$ColumnInfo将为每列包含一个对象,具有所有4个属性。

您应该考虑使用散列表(@{},一个无序字典),而不是使用多维数组:

$ColumnInfo = $DataTable.Columns | ForEach-Object -Begin { $ht = @{} } -Process {
    $ht[$_.ColumnName] = $_
} -End { return $ht }

在这里,我们创建一个空的哈希表$ht-Begin块只运行一次),然后使用$ht作为键将每个列对象存储在ColumnName中,最后返回$ht,将其存储在$ColumnInfo

现在,您可以按名称引用每列的元数据:

$ColumnInfo.Column2
# or 
$ColumnInfo["Column2"]