多个属性的选择对象

use*_*746 3 powershell

我正在尝试找到一种优雅的方法来将System.Data.DataTable类型的表的元数据放入多维数组中,以便在程序中轻松参考。到目前为止,我对这个问题的处理似乎很乏味。

假设$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
Run Code Online (Sandbox Code Playgroud)

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

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

有没有一种方法可以轻松地拾取多个属性并将其一次放置到多维数组中?

Mat*_*sen 5

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

这是不正确的,Select-Object可以对参数使用任意数量的-Property参数

$ColumnInfo = $DataTable.Columns | Select-Object -Property DataType,ColumnName,ordinal,AllowDbNull
Run Code Online (Sandbox Code Playgroud)

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

与其使用多维数组,不如考虑使用哈希表(@{},无序字典):

$ColumnInfo = $DataTable.Columns | ForEach-Object -Begin { $ht = @{} } -Process {
    $ht[$_.ColumnName] = $_
} -End { return $ht }
Run Code Online (Sandbox Code Playgroud)

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

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

$ColumnInfo.Column2
# or 
$ColumnInfo["Column2"]
Run Code Online (Sandbox Code Playgroud)