将Ordered哈希表传递给脚本块会破坏顺序

问题描述 投票:2回答:1

我正试图以CSV字符串的形式从远程主机收集一些信息。我需要以特定顺序返回值以将它们累积在一个CSV文件中。

我使用有序哈希表来按键保持特定顺序,但是当我将它传递给远程主机时,命令就会被破坏。

有没有办法保存订单?

$ordered_hash = [ordered]@{"a" = 1; "b" = 2; "c" = 3}
$ordered_hash
$scriptblock = {
param ($hash)
$hash
} 
Invoke-Command -ComputerName localhost -ScriptBlock $scriptblock -ArgumentList ([hashtable]$ordered_hash)

返回:

Name                           Value                                                                                                                                     
----                           -----                                                                                                                                     
a                              1                                                                                                                                         
b                              2                                                                                                                                         
c                              3                                                                                                                                         
c                              3                                                                                                                                         
b                              2                                                                                                                                         
a                              1                                                                                                                                         
powershell csv
1个回答
1
投票

使用[ordered]属性定义哈希表时,实际上它会创建一个System.Collections.Specialized.OrderedDictionary

当它传递给HashTable类型的参数时,它将OrderedDictionary转换为HashTable,它不再是有序的。

要保留订单,您可以使用以下任一选项:

  • 从脚本块的参数中删除类型以防止类型更改。这样它将使用使用OrderedDictionary的原始类型。

要么

  • 使用脚本块参数的System.Collections.Specialized.OrderedDictionary类型。
© www.soinside.com 2019 - 2024. All rights reserved.