我正在使用 PowerShell 创建测试文件,以测试 Robocopy 日志的输出。为了获得新旧文件的不同组合,我正在源和目标中设置文件时间戳。但是,我无法控制 LastAccessTime 属性,这使我无法创建 Robocopy 视为完全相同(“相同”)的文件。
我可以将 CreationTime 和 LastWriteTime 设置为任意时间戳。但设置 LastAccessTime 只会将 LastAccessTime 刷新为当前日期和时间。
$Item = New-Item "test.txt" -Force -Value "test"
$Item.CreationTime = "2000-01-01"
$Item.LastWriteTime = "2000-01-01"
$Item.LastAccessTime= "2000-01-01" # doesn't work
Set-ItemProperty -Path "test.txt" -Name LastAccessTime -Value "2000-01-01" # also doesn't work
$Item = $(Get-Item -Path "test.txt") # refresh the $Item otherwise we see a phantom update of LastAccessTime
Write-Host "$($Item.CreationTime) $($Item.LastWriteTime) $($Item.LastAccessTime))"
我期望输出是:
01/01/2000 00:00:00 01/01/2000 00:00:00 01/01/2000 00:00:00
但实际的输出是:
01/01/2000 00:00:00 01/01/2000 00:00:00 06/11/2022 17:29:35
如果我等待几秒钟,然后重新运行最后三行,LastAccessTime 将再次更改为当前日期和时间。
有没有办法用 PowerShell 设置 LastAccessTime?
答案1
所有 3 个文件时间戳 (CreationTime、LastWriteTime、LastAccessTime) 都可以使用 PowerShell 设置。
可以通过属性或使用 Set-ItemProperty cmdlet 设置时间戳。设置 3 个时间戳的有效方法示例如下:
$Item = New-Item "test.txt" -Force -Value "test"
# all equally valid ways to set timestamp:
$Item.CreationTime = "2000-01-01"
$(Get-Item "test.txt").LastWriteTime = "2000-01-01"
Set-ItemProperty -Path "test.txt" -Name LastAccessTime -Value "2000-01-01"
# see the result
Get-Item "test.txt" | Select CreationTime, LastWriteTime, LastAccessTime | Format-List
笔记设置 LastAccessTime 可能不稳定,因为其他进程可能会在文件时间戳更新时读取文件,从而触发 LastAccessTime 更新。更新 LastAccessTime 的可能元凶包括 SearchProtocolHost.exe 或防病毒软件。