powershell - PowerShell维护PSObject中DataTable的顺序

标签 powershell datatable hashtable import-from-excel

我正在尝试导入Excel工作表,它工作正常。但是,不保留列的顺序。例如,写在第一列中的文本将作为第二个属性而不是第一个属性输出。

示例输入文件:

ServerName   | First name | Last name
C:\Drive     | Bob        | Johnson

上面的示例将以下输出显示为PSObject,这是不正确的,因为它的顺序与上面的文件不同。它应该首先以ServerName开头,而不是:
First name : Bob
ServerName : C:\Drive
Last name  : Johnson

代码:
Function Import-Excel {
    [CmdletBinding()]
    Param (
        [String]$FileName, 
        [String]$WorksheetName
    )

    Process {
        $OleDbConnection = New-Object 'System.Data.OleDb.OleDbConnection'
        $OleDbCommand    = New-Object 'System.Data.OleDb.OleDbCommand'
        $OleDbAdapter    = New-Object 'System.Data.OleDb.OleDbDataAdapter'
        $DataTable       = New-Object 'System.Data.DataTable'

        $ConnString = 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source='
        $ConnString += $FileName
        $ConnString += ';Extended Properties="Excel 12.0;HDR=YES;IMEX=1";'          
        $OleDbConnection.ConnectionString = $ConnString
        $OleDbConnection.Open()
        $OleDbCommand.Connection = $OleDbConnection
        $OleDbCommand.CommandText = "SELECT * FROM [$WorksheetName$]"
        $OleDbAdapter.SelectCommand = $OleDbCommand
        $OleDbAdapter.Fill($DataTable) | Out-Null
        $OleDbConnection.Close()

        $columnArray = @()
        foreach ($Col in $DataTable.Columns.ColumnName) {
            $ColumnArray += $Col.toString()
        }
        $returnObject = @()
        foreach ($Ro in $DataTable.Rows) {
            $i=0;
            $rowObject = @{}
            foreach ($colu in $Ro.ItemArray) {
                $rowObject += @{$columnArray[$i]=$colu.toString()}
                $i++
            } 
            $returnObject += New-Object PSObject -Property $rowObject
        }
        return $returnObject
    }
}

到目前为止,我已经尝试过使用ArrayList代替。这样可以很好地保持输入顺序正确,但是New-Object PSObject不接受ArrayList作为输入。

谢谢您的帮助。

最佳答案

找到了我的答案here

似乎有一个有序哈希表:

$rowObject = [Ordered]@{}

关于powershell - PowerShell维护PSObject中DataTable的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28966347/

相关文章:

java - HashTable中的排序问题

Powershell 卸载脚本 - 真的很头疼

powershell - PowerShell 中的 `>`(重定向)和 Out-File 有什么区别

c# - PowerShell 和 Google Protocol Buffer 技术

powershell - 传递给 Invoke-Command 的属性将类型从 IDictionary 更改为 HashTable

javascript - 我需要使用 Twitter Bootstrap 图标在数据表中使用切换选项

node.js - 在NodeJS中使用带有大量数据的Datatable时搜索错误

jquery 数据表单个列过滤器

c# - 如何使用 ServiceStack JsonSerializer 序列化哈希表?

data-structures - 使用 float / double 的哈希表/字典