我正在编写一个脚本来测试某个文件当前是否在目录中,如果是,它将用于脚本中的下一个操作。但是,此脚本将作为计划任务运行,并且我不希望此步骤多次发生。在我的脑海中,最好的方法是让Test-path Command工作如下:
Test-Path C:\Path\File.zip | where {$_.LastWriteTime -lt (Get-Date).AddMinutes(-30)}
这并不像我想象的那样有效。有没有办法检查文件是否存在并在If语句中具有该文件?类似的东西:
if(test-path C:\Path\File.zip | where {$_.LastWriteTime -lt (Get-Date).AddMinutes(-30)}) {execute scriptblock}
或者,如果Get-Childitem有办法在if语句中返回bool我可以使用它吗?非常感谢。
答案 0 :(得分:5)
问题是Test-Path
cmdlet返回boolean
($True
或$False
),而不是FileInfo
对象。因此,返回值没有LastWriteTime
属性,这就是您的代码不起作用的原因。
正如您所想的那样,您可以使用以下事实:PowerShell中的if语句将空列表和$NULL
对象评估为false,而包含项目的列表或正确的对象引用(非null)评估为真。因此,您可以将其更改为:
if (Get-ChildItem C:\Path\File.zip | Where { $PSItem.LastWriteTime -gt (Get-Date).AddMinutes(-30))
{
# File newer than half an hour exists
}
else
{
# No file newer than half an hour exists
}