按日期属性对 powershell 哈希表进行排序
Posted
技术标签:
【中文标题】按日期属性对 powershell 哈希表进行排序【英文标题】:Sort powershell hashtable by date property 【发布时间】:2022-01-21 23:34:05 【问题描述】:我有一个包含大约 1000 个项目的哈希表,其中一个属性是日期
$ht=@
$ht[1]=@Date="11/11/2021"; Number=03321
$ht[2]=@Date="10/10/2021"; Number=03321
$ht[3]=@Date="09/10/2021"; Number=03321
# .....
等等 我需要选择 10 条日期最早的记录 - 知道我该怎么做吗? 谢谢
【问题讨论】:
我不知道你是怎么想到这种格式的,但在 PowerShell 中更常见的是有一个PSCustomObject
s 的列表,也知道这通常是 cmdlet 的默认输入和输出(包括显示)。
从 SharePoint 获取
【参考方案1】:
我会将这个包含编号哈希表的 Hashtable 转换为 PsCustomObjects 数组,从而使排序和选择变得更加容易:
$ht=@
$ht[1]=@Date="11/11/2021"; Number=03321
$ht[2]=@Date="10/10/2021"; Number=03321
$ht[3]=@Date="09/10/2021"; Number=03321
# convert to array of PsCustomObjects
$ht.GetEnumerator() | ForEach-Object [PsCustomObject]$_.Value |
Sort-Object [datetime]::ParseExact($_.Date, 'dd/MM/yyyy', $null) |
Select-Object -First 10
这将产生一个对象数组,具有属性Number
和Date
,按日期排序。
【讨论】:
【参考方案2】:以下脚本用于按日期升序。如果降序添加 -descending 在 sort-object 中,还请更改您在 select-object 中的记录数
$ht=@
$ht[1]=@Date="11/11/2021"; Number=03320
$ht[2]=@Date="10/10/2021"; Number=03321
$ht[3]=@Date="09/10/2021"; Number=03329
$ht.GetEnumerator()| Sort-Object $_.Value.Date | Select-Object -First 2 | ForEach-Object Write-Host $_.Value.Date $_.Value.Number
【讨论】:
这似乎可行,但如果我尝试从“foreach”创建一个新哈希: $h_fs=@ $h_free.GetEnumerator()|排序对象 $_.Value.ReleaseDate | ForEach-Object $tn=$_.Value; $n=$tn.Number; $h_fs["$n"]=@数字=$n; ReleaseDate=$tn.ReleaseDate ; Write-Host $n " - " $tn.ReleaseDate 我得到“System.Collections.DictionaryEntry”的列表,而不是可以被 $object.property 引用的普通对象? 上述代码与给定的输入不同,GetEnumerator 将列出值。从那里您可以提取值。请参考@Theo 答案,使用 PSCustomObject 会更加高效和简单。以上是关于按日期属性对 powershell 哈希表进行排序的主要内容,如果未能解决你的问题,请参考以下文章