gpt4 book ai didi

powershell - PowerShell维护PSObject中DataTable的顺序

转载 作者:行者123 更新时间:2023-12-03 00:50:39 28 4
gpt4 key购买 nike

我正在尝试导入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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com