具有来自Get-Variable的意外结果的Sort-Object

时间:2015-03-05 14:06:40

标签: sorting powershell

请查看

Get-Variable | Sort-Object -property Value

在PowerShell提示符下。您可能会看到值已全部排序。有一种排序,一些块似乎已被排序,但介于两者之间 - 至少在我的PowerShell(V4)中有很多项目位于完全荒谬的位置。

有人能说明Sort-Object在这种情况下失败的原因吗?

THX

阿明。

2 个答案:

答案 0 :(得分:3)

未定义两个不同类型的对象之间的顺序(除非明确定义)。因此,当您尝试对对象进行排序时,您无法真正期望它们遵循您认为有意义的内容,甚至是任何真实的逻辑。

如果您将它们转换为通用类型,例如通过首先将它们转换为字符串,您将获得正确的订单:

Get-Variable | sort { [string] $_.Value }

答案 1 :(得分:1)

它很难按照您的预期对结果进行排序,因为这些值都具有不同的数据类型。即使你看到的是字符串值,这些值中的每一个都有一个特定的数据类型,如字符串,整数,布尔值等等。没有一致的规则集可以正确地对所有这些值进行排序。如果对变量名称而不是值进行相同操作,则会看到一致的排序 - 这是因为变量名称本质上是字符串值,可以按字母顺序排序。