arrays - PowerShell 数组过滤器

标签 arrays powershell filtering

我有一个数组通过管道传输到 PowerShell 中。尝试选择今天到接下来 3 周内匹配的内容。

1/4/2023    First Last
1/11/2023   First Last
1/19/2023   First Last
1/25/2023   First Last
2/1/2023    First Last
2/8/2023    First Last
2/15/2023   First Last
2/22/2023   First Last
3/1/2023    First Last
3/8/2023    First Last

预期结果是:

1/19/2023   First Last
1/25/2023   First Last
2/1/2023    First Last
2/8/2023    First Last

试图修改它以获得结果,但没有得到我需要的。

$referenceDate = (Get-Date).AddDays(21)
Get-Content -Path 'Dates.ini' |
Where-Object { $_ -match '^(\d{2}/\d{2}/\d{4})' } |
Where-Object { [datetime]::ParseExact($matches[1], 'MM/dd/yyyy', $null) -gt $referenceTime } |
ForEach-Object {
    $_
    #DO SOMETHING.. For demo just output the line(s) that matched
}

我的 PowerShell kung foo 并不强,非常感谢您的回答...

详细列出。 PowerShell 版本是 Server 2019 的默认版本。

最佳答案

我肯定会考虑使用 switch这里带有 -Regex 标志:

$referenceDate = (Get-Date).AddDays(21)

switch -Regex -File Dates.ini {
    '^(?:\d{1,2}/){2}\d{4}' {
        $date = Get-Date $Matches[0]
        if($date -ge [datetime]::Today -and $date -le $referenceDate) {
            $_
        }
    }
}

关于你的代码,它几乎是正确的,有3个问题:

  1. 正则表达式需要一些调整。
  2. ParseExact 的调用未使用正确的日期格式。
  3. 您当前正在过滤超过 3 周的日期,而您想要的日期是小于或等于 3 周且大于或等于今天的日期。
$referenceDate = (Get-Date).AddDays(21)

Get-Content -Path 'Dates.ini' |
    Where-Object { $_ -match '^(\d{1,2}/\d{1,2}/\d{4})' } |
    Where-Object {
        $date = [datetime]::ParseExact($Matches[1], 'M/d/yyyy', $null)
        $date -ge [datetime]::Today -and $date -le $referenceDate
    } | ForEach-Object { $_ }

关于arrays - PowerShell 数组过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75179390/

相关文章:

javascript - 根据用户选择过滤 JSON 嵌套数组

powershell - 通过管道将 0..10 连接到高级函数

wordpress - Woocommerce Admin 按库存/缺货过滤

arrays - 如何获取项目中的plist文件列表

php - codeigniter:将值从数组1插入到数组2?

loops - 在 For 循环期间显示进度

powershell - 无法从 Exchange cmdlet 捕获/重定向警告

php - 如何从 PHP 中的多维数组中删除空值?

php - 在同一个标​​题下合并术语,除非 new = 创建新标题 Wordpress 查询

使用指针将数组复制到数组