PowerShell如何在文件夹中查找今日最新创建的mdb备份文件
问题诊断
原脚本存在3个核心问题导致无法正确获取目标文件:
Sort-Object语法错误:传递属性名时不需要加$_前缀,原写法$_.CreationTime会导致排序逻辑完全失效- 排序逻辑错误:默认采用升序排序,搭配
Select-Object -First 1获取到的是最早创建的文件,而非最新文件 - 缺少时间过滤规则:没有限定仅查询今日创建的备份文件
修改后的完整脚本
$Destination = "\\DC-Server1\Backups$\Folder1" do{ $Server = Test-Connection 'RegionalServer1' -Count 1 -Delay 30 -Quiet if($Server) { # 获取今日创建的最新mdb备份文件 Get-ChildItem -Path E:\Backups -Filter "*.mdb" -File | Where-Object { $_.CreationTime.Date -eq (Get-Date).Date } | Sort-Object -Property CreationTime -Descending | Select-Object -First 1 | Copy-Item -Destination $Destination -Force } }until($Server)
优化说明
- 用内置
-File参数替代Where-Object { -not $_.PSIsContainer },过滤文件夹的逻辑更简洁高效 - 新增
-Filter "*.mdb"参数,仅扫描mdb格式的备份文件,排除目录下其他无关文件 - 新增日期过滤规则
$_.CreationTime.Date -eq (Get-Date).Date,仅保留当日创建的文件 - 修正排序语法,新增
-Descending参数按创建时间倒序排列,取第一个就是当日最新的备份文件
备选方案(适配文件属性时间不准的场景)
从你提供的文件列表可以看到,部分文件的属性时间和文件名标注的备份日期不一致,如果遇到创建时间属性不准的情况,可以直接匹配文件名中的日期字段,可靠性更高:
$Destination = "\\DC-Server1\Backups$\Folder1" # 生成和备份文件名格式一致的当日日期字符串(日-月-年) $todayDateStr = Get-Date -Format "dd-MM-yyyy" do{ $Server = Test-Connection 'RegionalServer1' -Count 1 -Delay 30 -Quiet if($Server) { Get-ChildItem -Path E:\Backups -Filter "*.mdb" -File | Where-Object { $_.Name -match $todayDateStr } | Sort-Object -Property CreationTime -Descending | Select-Object -First 1 | Copy-Item -Destination $Destination -Force } }until($Server)
内容的提问来源于stack exchange,提问作者Nuisance
相关产品推荐
相关产品推荐

