powershell - 从列表 Powershell 中获取距今天最近的日期
问题描述
对不起,一个可能很简单的问题,但老实说,我无法形成正确的解决方案。
脚本会生成一个列表,其中包含时间和 AD 组名称的信息,格式如下:
+----------------+---------------------+
| ADGroupName | StartTime |
+----------------+---------------------+
| AD-group-name1 | 15.7.2020 00:00:00 |
| AD-group-name2 | 18.7.2020 00:00:00 |
| AD-group-name3 | 21.7.2020 00:00:00 |
| AD-group-name4 | 22.7.2020 00:00:00 |
| AD-group-name5 | 23.7.2020 00:00:00 |
| AD-group-name6 | 24.7.2020 00:00:00 |
| AD-group-name7 | 25.7.2020 00:00:00 |
| AD-group-name8 | 26.7.2020 00:00:00 |
| AD-group-name9 | 30.7.2020 00:00:00 |
+----------------+---------------------+
下一个问题是:如何显示列表中的一行,其中仅包括最接近今天日期的下一个日期?
谢谢!
更新:原始代码如下所示
cd 'E:\Program Files\Microsoft Configuration Manager\AdminConsole\bin'
Import-Module .\ConfigurationManager.psd1
cd T:\
$CollectionIDs = "id1" , "id2"
$date=[datetime]::Today.ToString('MM')
$month= $date.substring(1)
$Outfile = "C:\temp\outfile.txt"
if (Test-Path $Outfile) {Clear-Content $Outfile}
foreach ($id in $CollectionIDs) {
if ($id -eq "id1") {
Get-CMMaintenanceWindow -CollectionId "$id" | Select-Object @{Name='ADGroupName';Expression={'\AD-group-name1'}}, StartTime | Sort-Object StartTime -Descending | ft -AutoSize | out-string | Add-Content $Outfile
}
elseif ($id -eq "id2") {
Get-CMMaintenanceWindow -CollectionId "$id" | Select-Object @{Name='ADGroupName';Expression={'\AD-group-name2'}}, StartTime | Sort-Object StartTime -Descending | ft -AutoSize | out-string | Add-Content $Outfile
}
}
$result = Select-String -Path $Outfile -Pattern ".$month." -SimpleMatch
Remove-Item $Outfile
$result -creplace '(?s)^.*\\', '
解决方案
就像 Mathas 在评论中所说的那样,现在仍然很明显 StarTime 是字符串还是日期时间。所以我用 StartTime 作为字符串创建了对象数组并添加了解析。.
$data=@(
@{ADGroupName='AD-group-name1';StartTime='15.7.2020 00:00:00'},@{ADGroupName='AD-group-name2';StartTime='18.7.2020 00:00:00'},@{ADGroupName='AD-group-name3';StartTime='21.7.2020 00:00:00'},@{ADGroupName='AD-group-name4';StartTime='22.7.2020 00:00:00'},@{ADGroupName='AD-group-name5';StartTime='23.7.2020 00:00:00'},@{ADGroupName='AD-group-name6';StartTime='24.7.2020 00:00:00'},@{ADGroupName='AD-group-name7';StartTime='25.7.2020 00:00:00'},@{ADGroupName='AD-group-name8';StartTime='26.7.2020 00:00:00'},@{ADGroupName='AD-group-name9';StartTime='30.7.2020 00:00:00'}
) | foreach{[pscustomobject]$_}
# fixed date just to create working example
$today = get-date -Year 2020 -Month 7 -Day 24
# parse datetime strings, filter by today, sort, select first result
$data |
select adgroupname,@{n='StartTimeParsed';e={[datetime]::ParseExact($_.StartTime,'dd.M.yyyy HH:mm:ss',[System.Globalization.CultureInfo]::InvariantCulture)}} |
where StartTimeParsed -gt $today | sort StartTimeParsed | select -First 1
推荐阅读
- c# - C# Xamarin 在 TabbedPage 中使用 ObservableCollection 形成嵌套列表
- python-3.x - 如何使用 matplotlib 调整大小并显示带有补丁的裁剪图像?
- android - Koin 和 Kotlin:不能使用 T 作为具体参数
- c# - GTK TreeView 复选框留给文本?
- php - 计算其他表中每个 id 的行数包含与使用活动记录的外键相同的 id
- c# - Visual Studio 2019 不会在项目打开时拉取所需的 Docker 映像
- c# - Xamarin 对象数据绑定
- angular - Angular - 表单提交被取消,因为在尝试显示数据时表单未连接
- android - 无法理解如何在应用程序中打开简单的 TWA(使用 AndroidX)
- r - 在R中将嵌套列表转换为数据框