获取字符串中具有特定日期的文件的 Powershell 脚本

Powershell Script to Get Files with Certain Date in String

我正在构建一个 powershell 脚本以仅抓取字符串中具有特定日期(昨天的日期)的文件并显示它们的名称。但它似乎并不顺利。我试过谷歌搜索,但没有找到关于我正在尝试做的事情的具体帮助:

$a = (Get-Date).AddDays(-1).ToString('yyyyMMdd')

$b = Get-ChildItem "E:\Export" -Filter {$_.Name -like '*'+$a.ToString()}

Get-ChildItem "E:\Export" -Filter *.txt |

Foreach-Object {

    If ($b -like $a)
    {
    Write-Host $b
    }

}

如有任何帮助,我们将不胜感激。

$a IS 已经是一个字符串。您不能简单地将脚本块作为过滤器。

$a = (Get-Date).AddDays(-1).ToString('yyyyMMdd')
$b = Get-ChildItem "E:\Export" | Where-Object BaseName -like "*$a*"
$b

$b = Get-ChildItem "E:\Export\*$a*"

td;dr

$b = Get-ChildItem "E:\Export" -Filter ('*' + $a)

或者,使用 PowerShell 的字符串扩展(插值):

$b = Get-ChildItem "E:\Export" -Filter "*$a"

-Filter参数值:

  • 总是[string]类型

  • 它们的特定语法 供应商依赖

由于您处理的是 文件,因此 FileSystem PS 提供程序会解释 -Filter,并且它需要一个 通配符表达式作为参数,被基础WindowsAPI接受;通配符表达式与文件 name.

隐式匹配

注:

  • 通常 - 例如在这种情况下 - 这样的通配符表达式与 PowerShell's own wildcard expressions 的工作方式相同,但前者有怪癖以支持遗留应用程序,而后者提供额外的功能。

  • 没有标准提供程序接受 脚本块 任意 PowerShell 代码 作为 -Filter 参数,尽管它们与 Active Directory 提供程序的广泛使用 - 但被误导 - 请参阅 this answer.

要通过脚本块在 PowerShell 代码 中对输出对象执行任意过滤,请通过管道连接到 Where-Object cmdlet,如 所示。

但是,如果可行,-Filter 的使用应始终是首选,因为它在源头 进行过滤,这意味着提供者 returns 将已经过滤的结果发送给 PowerShell(而不是在 PowerShell 代码中事后过滤结果),这 可以大大加快操作速度.