对不起,可能是一个简单的问题,但老实说,我无法形成正确的解决方案。
脚本会生成一个列表,其中包含带有时间和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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句