REFERENCE SCRIPTS:
脚本1:
$csvList = @()
$csvList += New-Object PSObject -Property @{name="test1";accountname="testuser1";mail="user1@somewhere.com"}
$csvList += New-Object PSObject -Property @{name="test2";accountname="testuser2";mail="user2@somewhere.com"}
$csvList += New-Object PSObject -Property @{name="test3";accountname="testuser3";mail="user3@somewhere.com"}
$csvList += New-Object PSObject -Property @{name="test4";accountname="testuser4";mail="user4@somewhere.com"}
$csvList | Export-Csv c:\temp\testcsv.csv -NoTypeInformation
脚本2(在编辑中添加以反映扩展用法):
$aTest = @()
for($x=0;$x -le 5;$x++)
{
$aTest += New-Object PSObject -Property @{Name="test$($x)"; `
AccountName="testuser$($x)"; `
Mail="user$($x)@somewhere.com"}
}
$aTest | Export-Csv c:\temp\testcsv.csv -NoTypeInformation
问题:
虽然该脚本创建了我的CSV并在正确的行中包含了我需要的所有数据,但我无法弄清楚如何控制列位置。即使我按name,accountname,mail
排序并添加数据,Powershell也会按mail,name,accountname
对其进行排序。 如何控制列顺序?
注意:如果我在导出之前对$csvList
的内容进行了屏幕转储,则订单已经更改。
答案 0 :(得分:3)
每个PSObject
本质上都是一个哈希表。哈希表中没有值的排序。 Select-Object
可以为您重新格式化订单。
建立你的最后一行:
$csvList | Select-Object name,accountname,mail | Export-Csv c:\temp\testcsv2.csv -NoTypeInformation
从这个论坛问题得到了想法:Source
答案 1 :(得分:2)
如果您正在运行V4,他们添加了一个类型加速器([PSCustomObject]),用于创建使用有序哈希表的PS对象,因此属性保持在哈希文字中声明的顺序。
$(
[PSCustomObject]@{name="test1";accountname="testuser1";mail="user1@somewhere.com"}
[PSCustomObject]@{name="test2";accountname="testuser2";mail="user2@somewhere.com"}
[PSCustomObject]@{name="test3";accountname="testuser3";mail="user3@somewhere.com"}
[PSCustomObject]@{name="test4";accountname="testuser4";mail="user4@somewhere.com"}
) | Export-Csv c:\temp\testcsv.csv -NoTypeInformation
编辑:使用循环构建有序哈希表的示例:
foreach ($i in 1..4)
{
$ht = [ordered]@{}
$ht.name = "test$i"
$ht.accountname = "testuser$i"
$ht.mail = "user$i@somewhere.com"
[PSCustomObject] $ht
}