可以使用 PowerShell 将 LastAccessTime 设置为旧时间戳吗?

可以使用 PowerShell 将 LastAccessTime 设置为旧时间戳吗?

我正在使用 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 或防病毒软件。

相关内容