Hashtables не упорядочены по определению. Если у вас есть PowerShell v3.0 или более поздней версии, вы можете использовать атрибут [Ordered]
для Hashtable:
New-Object PSCustomObject -Property ([Ordered] @{
Computername = $_
PowerShellVersion = $result[0]
dotNetVersion = $result[1]
sqlnacli = $result[2]
redistributable = $result[3]
})
В PowerShell v3 + можно также использовать только [PSCustomObject]
типа ускорителя:
[PSCustomObject] @{
Computername = $_
PowerShellVersion = $result[0]
dotNetVersion = $result[1]
sqlnacli = $result[2]
redistributable = $result[3]
}
Если вам нужно PowerShell версии 2 совместимости, то вы можете использовать
New-Object PSObject -Property @{
Computername = $_
PowerShellVersion = $result[0]
dotNetVersion = $result[1]
sqlnacli = $result[2]
redistributable = $result[3]
} | Select-Object Computername,PowerShellVersion,dotNetVersion,sqlnacli,redistributable
недостатком этого метода является то, если вы добавите свойства, вы должны помнить, чтобы добавить т кромка до Select-Object
.
Альтернативой PowerShell v2 или старше для вывода чего-то (например, пустая строка), а затем использовать Select-Object
, чтобы создать именно пользовательские свойства, которые вы хотите:
$obj = $_
"" | Select-Object `
@{Name = "Computername"; Expression = {$obj}},
@{Name = "PowerShellVersion"; Expression = {$result[0]}
@{Name = "dotNetVersion"; Expression = {$result[1]}
@{Name = "sqlnacli"; Expression = {$result[2]}
@{Name = "redistributable"; Expression = {$result[3]}
Только (малый) недостаток в том, что $_
в Select-Object
относится к непосредственно предшествующему объекту, из которого выбраны свойства (отсюда $obj = $_
в качестве первой строки, чтобы сохранить значение).
дублирует действительно, но я думаю, что ответ на этот вопрос более высокого качества, а также название вопроса является более общим – SimonS