我有下面的psobject (从csv进口),这是原始的,
Computer Name : CompName
Date : 10/26/2020
7/1/2021
3/6/2019
7/13/2022
3/6/2019
2/7/2021
10/13/2020
2/7/2021
2/7/2021
7/1/2021
10/13/2020
IP Address : 127.0.0.1
OS : Win10 10.0.17763.1282 (1809)
CPU : 2600 MHz Core i5-6500T
Last Report Time : Wed, 1 Aug 2022 09:54:51 +0000
Computer Name : CompName2
Date : 2/10/2021
6/24/2021
3/6/2019
3/6/2019
2/12/2021
2/9/2021
2/9/2021
6/24/2021
2/10/2021
IP Address : 127.0.0.2
OS : Win10 10.0.17763.973 (1809)
CPU : 2700 MHz Core i5-6500T
Last Report Time : Wed, 1 Aug 2022 11:38:34 +0000我想对日期进行排序,并在单个对象中获取最后一个日期。这意味着这是最后一次通缉。
Computer Name : CompName
Date : 7/13/2022
IP Address : 127.0.0.1
OS : Win10 10.0.17763.1282 (1809)
CPU : 2600 MHz Core i5-6500T
Last Report Time : Wed, 1 Aug 2022 09:54:51 +0000
Computer Name : CompName2
Date : 6/24/2021
IP Address : 127.0.0.2
OS : Win10 10.0.17763.973 (1809)
CPU : 2700 MHz Core i5-6500T
Last Report Time : Wed, 1 Aug 2022 11:38:34 +0000有什么想法吗?
发布于 2022-08-10 15:04:36
让我们首先来看看我们如何能够首先对单个值执行此操作。
Import-Csv将生成一个多行字符串:
$dates = @'
10/26/2020
7/1/2021
3/6/2019
7/13/2022
3/6/2019
2/7/2021
10/13/2020
2/7/2021
2/7/2021
7/1/2021
10/13/2020
'@在对单个日期字符串进行有意义的排序之前,我们需要将它们拆分为多个字符串:
$dates -split '\r?\n'在此之后,我们可以要求Sort-Object将每个字符串作为一个[datetime]值来获得正确的排序顺序:
$datesSorted = $dates -split '\r?\n' |Sort-Object { [datetime]::ParseExact($_, 'd/M/yyyy', $null) } -Descending最后,只获取第一个值,得到最大/最新的值:
$datesSorted |Select-Object -First 1现在我们已经知道如何从单个Date属性中获得正确的行了,我们可以将其放在一起并使用ForEach-Object语句修改每个对象:
$csvData |ForEach-Object {
$_.Date = $_.Date -split '\r?\n' |Sort-Object {[datetime]::ParseExact($_, 'd/M/yyyy', $null)} -Descending |Select -First 1
}存储在$csvData中的对象现在都按照需要修改了它们的Date属性值。
发布于 2022-08-10 15:22:55
我只是重新读了你的帖子。你的进口- CMDLET是什么样子的?默认情况下,CSV不导入多维数组。如何在CSV文件中格式化日期列?您还有两个对象,所以我假设这是一个我们正在处理的数组。
最初的答复:
只要日期属性是字符串数组,这将在单个对象或数组上工作。
这将保留日期数组,以防其他事情需要它,并添加一个额外的属性"RecentDate“。
$simpleArray=$simpleArray | Select *, @{N="RecentDate";e={$_.Date | sort | select -last 1}}$dates1 = "10/26/2020
7/1/2021
3/6/2019
7/13/2022
3/6/2019
2/7/2021
10/13/2020
2/7/2021
2/7/2021
7/1/2021
10/13/2020" -split("`n")
$dates1=$dates1.trim()
$dates2 = "2/10/2021
6/24/2021
3/6/2019
3/6/2019
2/12/2021
2/9/2021
2/9/2021
6/24/2021
2/10/2021" -split("`n")
$dates2=$dates2.trim()
$obj1 = [pscustomobject]@{'Computer name'="CompName"
Date=$dates1
'IP Address'="127.0.0.2"
OS="Win10 10.0.17763.973 (1809)"
CPU="2700 MHz Core i5-6500T"
'Last Report Time'="Wed, 1 Aug 2022 11:38:34 +0000"
}
$obj2 = [pscustomobject]@{'Computer name'="CompName2"
Date=$dates2
'IP Address'="127.0.0.2"
OS="Win10 10.0.17763.1282 (1809)"
CPU="2700 MHz Core i5-6500T"
'Last Report Time'="Wed, 1 Aug 2022 09:54:51 +0000"
}
$simpleArray = New-Object -TypeName 'System.Collections.ArrayList';
$null=$simpleArray.add($obj1)
$null=$simpleArray.add($obj2)输出:
Computer name : CompName
Date : {10/26/2020, 7/1/2021, 3/6/2019, 7/13/2022...}
IP Address : 127.0.0.2
OS : Win10 10.0.17763.973 (1809)
CPU : 2700 MHz Core i5-6500T
Last Report Time : Wed, 1 Aug 2022 11:38:34 +0000
RecentDate : 7/13/2022
Computer name : CompName2
Date : {2/10/2021, 6/24/2021, 3/6/2019, 3/6/2019...}
IP Address : 127.0.0.2
OS : Win10 10.0.17763.1282 (1809)
CPU : 2700 MHz Core i5-6500T
Last Report Time : Wed, 1 Aug 2022 09:54:51 +0000
RecentDate : 6/24/2021https://stackoverflow.com/questions/73308468
复制相似问题